@pepperi-addons/ngx-lib 0.4.2-beta.31 → 0.4.2-beta.310

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 (408) hide show
  1. package/README.md +35 -0
  2. package/address/address.component.d.ts +9 -2
  3. package/attachment/attachment.component.d.ts +3 -1
  4. package/carousel/carousel.component.d.ts +3 -2
  5. package/checkbox/checkbox.component.d.ts +8 -1
  6. package/chips/chips.component.d.ts +4 -7
  7. package/chips/chips.service.d.ts +0 -3
  8. package/core/common/directives/base-destroyer.directive.d.ts +10 -0
  9. package/core/common/directives/public-api.d.ts +1 -0
  10. package/core/common/pipes/common-pipes.d.ts +5 -2
  11. package/core/common/services/addon.service.d.ts +6 -4
  12. package/core/common/services/file.service.d.ts +7 -2
  13. package/core/common/services/session.service.d.ts +2 -0
  14. package/core/common/services/utilities.service.d.ts +4 -4
  15. package/core/customization/customization.model.d.ts +4 -1
  16. package/core/customization/customization.service.d.ts +4 -0
  17. package/date/date.component.d.ts +4 -2
  18. package/draggable-items/draggable-item/draggable-item.component.d.ts +16 -2
  19. package/draggable-items/draggable-items.component.d.ts +3 -6
  20. package/draggable-items/draggable-items.module.d.ts +4 -3
  21. package/elements/README.md +256 -0
  22. package/esm2020/address/address.component.mjs +93 -5
  23. package/esm2020/assets/i18n/ar.ngx-lib.json +180 -0
  24. package/esm2020/assets/i18n/de.ngx-lib.json +180 -0
  25. package/esm2020/assets/i18n/en.ngx-lib.json +186 -0
  26. package/esm2020/assets/i18n/es.ngx-lib.json +180 -0
  27. package/esm2020/assets/i18n/fr.ngx-lib.json +180 -0
  28. package/esm2020/assets/i18n/he.ngx-lib.json +180 -0
  29. package/esm2020/assets/i18n/hu.ngx-lib.json +79 -0
  30. package/esm2020/assets/i18n/it.ngx-lib.json +180 -0
  31. package/esm2020/assets/i18n/ja.ngx-lib.json +180 -0
  32. package/esm2020/assets/i18n/nl.ngx-lib.json +79 -0
  33. package/esm2020/assets/i18n/pl.ngx-lib.json +180 -0
  34. package/esm2020/assets/i18n/pt.ngx-lib.json +180 -0
  35. package/esm2020/assets/i18n/ru.ngx-lib.json +79 -0
  36. package/esm2020/assets/i18n/sr.ngx-lib.json +180 -0
  37. package/esm2020/assets/i18n/zh.ngx-lib.json +180 -0
  38. package/esm2020/attachment/attachment.component.mjs +16 -6
  39. package/esm2020/carousel/carousel.component.mjs +14 -4
  40. package/esm2020/checkbox/checkbox.component.mjs +37 -3
  41. package/esm2020/chips/chips.component.mjs +11 -16
  42. package/esm2020/chips/chips.service.mjs +2 -11
  43. package/esm2020/color/color-picker.component.mjs +3 -3
  44. package/esm2020/color/color.component.mjs +3 -3
  45. package/esm2020/core/common/directives/base-destroyer.directive.mjs +22 -0
  46. package/esm2020/core/common/directives/public-api.mjs +2 -1
  47. package/esm2020/core/common/pipes/common-pipes.mjs +18 -8
  48. package/esm2020/core/common/services/addon.service.mjs +31 -7
  49. package/esm2020/core/common/services/data-convertor.service.mjs +3 -3
  50. package/esm2020/core/common/services/file.service.mjs +57 -20
  51. package/esm2020/core/common/services/session.service.mjs +5 -1
  52. package/esm2020/core/common/services/utilities.service.mjs +7 -7
  53. package/esm2020/core/customization/customization.model.mjs +46 -10
  54. package/esm2020/core/customization/customization.service.mjs +29 -1
  55. package/esm2020/core/http/services/http.service.mjs +17 -8
  56. package/esm2020/core/http/services/loader.service.mjs +3 -3
  57. package/esm2020/date/date.component.mjs +35 -13
  58. package/esm2020/dialog/dialog.component.mjs +3 -3
  59. package/esm2020/draggable-items/draggable-item/draggable-item.component.mjs +44 -4
  60. package/esm2020/draggable-items/draggable-items.component.mjs +7 -15
  61. package/esm2020/draggable-items/draggable-items.module.mjs +5 -1
  62. package/esm2020/field-title/field-title.component.mjs +6 -3
  63. package/esm2020/files-uploader/files-uploader.component.mjs +23 -32
  64. package/esm2020/form/field-generator.component.mjs +3 -3
  65. package/esm2020/form/form.component.mjs +7 -4
  66. package/esm2020/form/internal-button.component.mjs +2 -2
  67. package/esm2020/form/internal-carusel.component.mjs +10 -6
  68. package/esm2020/form/internal-field-generator.component.mjs +3 -3
  69. package/esm2020/form/internal-form.component.mjs +5 -3
  70. package/esm2020/form/internal-list.component.mjs +2 -2
  71. package/esm2020/form/internal-menu.component.mjs +4 -6
  72. package/esm2020/form/internal-page.component.mjs +3 -4
  73. package/esm2020/group-buttons/group-buttons.component.mjs +2 -2
  74. package/esm2020/icon/icon.component.mjs +36 -6
  75. package/esm2020/icon/icon.service.mjs +5 -1
  76. package/esm2020/image/image.component.mjs +15 -3
  77. package/esm2020/image/image.service.mjs +2 -4
  78. package/esm2020/images-filmstrip/images-filmstrip.component.mjs +99 -25
  79. package/esm2020/json-editor/json-editor.component.mjs +288 -0
  80. package/esm2020/json-editor/json-editor.module.mjs +83 -0
  81. package/esm2020/json-editor/json-tree-node.component.mjs +32 -0
  82. package/esm2020/json-editor/pepperi-addons-ngx-lib-json-editor.mjs +5 -0
  83. package/esm2020/json-editor/public-api.mjs +6 -0
  84. package/esm2020/lib/i18n/embedded-i18n.mjs +33 -0
  85. package/esm2020/link/link.component.mjs +25 -4
  86. package/esm2020/list/list-actions.component.mjs +1 -1
  87. package/esm2020/list/list-chooser.component.mjs +1 -1
  88. package/esm2020/list/list-pager.component.mjs +1 -1
  89. package/esm2020/list/list-sorting.component.mjs +1 -1
  90. package/esm2020/list/list-total.component.mjs +6 -3
  91. package/esm2020/list/list-views.component.mjs +1 -1
  92. package/esm2020/list/list.component.mjs +230 -37
  93. package/esm2020/list/list.model.mjs +1 -1
  94. package/esm2020/menu/menu-item.component.mjs +3 -3
  95. package/esm2020/menu/menu.component.mjs +6 -3
  96. package/esm2020/menu/menu.model.mjs +2 -1
  97. package/esm2020/page-layout/page-layout.component.mjs +28 -7
  98. package/esm2020/profile-data-views-list/profile-data-view/profile-data-view.component.mjs +1 -1
  99. package/esm2020/profile-data-views-list/profile-data-views-card/profile-data-views-card.component.mjs +25 -9
  100. package/esm2020/profile-data-views-list/profile-data-views-list.component.mjs +58 -26
  101. package/esm2020/profile-data-views-list/profile-data-views-list.model.mjs +1 -1
  102. package/esm2020/public-api.mjs +2 -1
  103. package/esm2020/quantity-selector/quantity-selector.component.mjs +67 -33
  104. package/esm2020/query-builder/common/model/legacy.mjs +1 -1
  105. package/esm2020/query-builder/common/model/operator.mjs +73 -63
  106. package/esm2020/query-builder/common/services/output-query.service.mjs +5 -3
  107. package/esm2020/query-builder/common/services/query-structure.service.mjs +34 -2
  108. package/esm2020/query-builder/query-builder-item/query-builder-item.component.mjs +14 -12
  109. package/esm2020/query-builder/query-builder-section/query-builder-section.component.mjs +3 -3
  110. package/esm2020/query-builder/query-builder.module.mjs +14 -3
  111. package/esm2020/query-builder/query-builder.service.mjs +2 -2
  112. package/esm2020/remote-loader/addon-block-loader.component.mjs +26 -16
  113. package/esm2020/remote-loader/addon-block-loader.service.mjs +5 -2
  114. package/esm2020/remote-loader/remote-loader-element.component.mjs +81 -27
  115. package/esm2020/remote-loader/remote-loader.component.mjs +1 -3
  116. package/esm2020/remote-loader/remote-loader.model.mjs +1 -1
  117. package/esm2020/remote-loader/remote-loader.service.mjs +49 -26
  118. package/esm2020/reset-configuration-field/pepperi-addons-ngx-lib-reset-configuration-field.mjs +5 -0
  119. package/esm2020/reset-configuration-field/public-api.mjs +3 -0
  120. package/esm2020/reset-configuration-field/reset-configuration-field.component.mjs +55 -0
  121. package/esm2020/reset-configuration-field/reset-configuration-field.module.mjs +36 -0
  122. package/esm2020/rich-html-textarea/rich-html-textarea.component.mjs +19 -3
  123. package/esm2020/search/search.component.mjs +43 -16
  124. package/esm2020/select/select.component.mjs +124 -53
  125. package/esm2020/select-panel/select-panel.component.mjs +4 -6
  126. package/esm2020/side-bar/side-bar.component.mjs +18 -4
  127. package/esm2020/signature/public-api.mjs +2 -1
  128. package/esm2020/signature/signature-dialog.component.mjs +79 -0
  129. package/esm2020/signature/signature.component.mjs +84 -68
  130. package/esm2020/signature/signature.module.mjs +6 -5
  131. package/esm2020/size-detector/size-detector.component.mjs +16 -6
  132. package/esm2020/skeleton-loader/public-api.mjs +2 -2
  133. package/esm2020/skeleton-loader/skeleton-loader.component.mjs +33 -9
  134. package/esm2020/slider/slider.component.mjs +2 -2
  135. package/esm2020/smart-filters/boolean-filter/boolean-filter.component.mjs +1 -1
  136. package/esm2020/smart-filters/common/model/base-filter-component.mjs +5 -11
  137. package/esm2020/smart-filters/common/model/operator.mjs +15 -6
  138. package/esm2020/smart-filters/common/model/type.mjs +1 -1
  139. package/esm2020/smart-filters/date-filter/date-filter.component.mjs +1 -1
  140. package/esm2020/smart-filters/multi-select-filter/multi-select-filter.component.mjs +3 -3
  141. package/esm2020/smart-filters/number-filter/number-filter.component.mjs +3 -3
  142. package/esm2020/smart-filters/smart-filters.component.mjs +2 -2
  143. package/esm2020/smart-filters/text-filter/text-filter.component.mjs +27 -7
  144. package/esm2020/snack-bar/snack-bar.component.mjs +19 -4
  145. package/esm2020/textarea/textarea.component.mjs +12 -3
  146. package/esm2020/textbox/textbox-validation.directive.mjs +2 -4
  147. package/esm2020/textbox/textbox.component.mjs +85 -10
  148. package/esm2020/textbox-icon/textbox-icon.component.mjs +3 -3
  149. package/esm2020/top-bar/top-bar.component.mjs +26 -15
  150. package/fesm2015/pepperi-addons-ngx-lib-address.mjs +92 -5
  151. package/fesm2015/pepperi-addons-ngx-lib-address.mjs.map +1 -1
  152. package/fesm2015/pepperi-addons-ngx-lib-attachment.mjs +15 -5
  153. package/fesm2015/pepperi-addons-ngx-lib-attachment.mjs.map +1 -1
  154. package/fesm2015/pepperi-addons-ngx-lib-carousel.mjs +13 -3
  155. package/fesm2015/pepperi-addons-ngx-lib-carousel.mjs.map +1 -1
  156. package/fesm2015/pepperi-addons-ngx-lib-checkbox.mjs +37 -2
  157. package/fesm2015/pepperi-addons-ngx-lib-checkbox.mjs.map +1 -1
  158. package/fesm2015/pepperi-addons-ngx-lib-chips.mjs +11 -25
  159. package/fesm2015/pepperi-addons-ngx-lib-chips.mjs.map +1 -1
  160. package/fesm2015/pepperi-addons-ngx-lib-color.mjs +4 -4
  161. package/fesm2015/pepperi-addons-ngx-lib-color.mjs.map +1 -1
  162. package/fesm2015/pepperi-addons-ngx-lib-date.mjs +35 -12
  163. package/fesm2015/pepperi-addons-ngx-lib-date.mjs.map +1 -1
  164. package/fesm2015/pepperi-addons-ngx-lib-dialog.mjs +2 -2
  165. package/fesm2015/pepperi-addons-ngx-lib-dialog.mjs.map +1 -1
  166. package/fesm2015/pepperi-addons-ngx-lib-draggable-items.mjs +54 -19
  167. package/fesm2015/pepperi-addons-ngx-lib-draggable-items.mjs.map +1 -1
  168. package/fesm2015/pepperi-addons-ngx-lib-field-title.mjs +5 -2
  169. package/fesm2015/pepperi-addons-ngx-lib-field-title.mjs.map +1 -1
  170. package/fesm2015/pepperi-addons-ngx-lib-files-uploader.mjs +22 -31
  171. package/fesm2015/pepperi-addons-ngx-lib-files-uploader.mjs.map +1 -1
  172. package/fesm2015/pepperi-addons-ngx-lib-form.mjs +31 -25
  173. package/fesm2015/pepperi-addons-ngx-lib-form.mjs.map +1 -1
  174. package/fesm2015/pepperi-addons-ngx-lib-group-buttons.mjs +2 -2
  175. package/fesm2015/pepperi-addons-ngx-lib-group-buttons.mjs.map +1 -1
  176. package/fesm2015/pepperi-addons-ngx-lib-icon.mjs +40 -5
  177. package/fesm2015/pepperi-addons-ngx-lib-icon.mjs.map +1 -1
  178. package/fesm2015/pepperi-addons-ngx-lib-image.mjs +15 -5
  179. package/fesm2015/pepperi-addons-ngx-lib-image.mjs.map +1 -1
  180. package/fesm2015/pepperi-addons-ngx-lib-images-filmstrip.mjs +101 -24
  181. package/fesm2015/pepperi-addons-ngx-lib-images-filmstrip.mjs.map +1 -1
  182. package/fesm2015/pepperi-addons-ngx-lib-json-editor.mjs +407 -0
  183. package/fesm2015/pepperi-addons-ngx-lib-json-editor.mjs.map +1 -0
  184. package/fesm2015/pepperi-addons-ngx-lib-link.mjs +24 -3
  185. package/fesm2015/pepperi-addons-ngx-lib-link.mjs.map +1 -1
  186. package/fesm2015/pepperi-addons-ngx-lib-list.mjs +241 -43
  187. package/fesm2015/pepperi-addons-ngx-lib-list.mjs.map +1 -1
  188. package/fesm2015/pepperi-addons-ngx-lib-menu.mjs +8 -4
  189. package/fesm2015/pepperi-addons-ngx-lib-menu.mjs.map +1 -1
  190. package/fesm2015/pepperi-addons-ngx-lib-page-layout.mjs +27 -6
  191. package/fesm2015/pepperi-addons-ngx-lib-page-layout.mjs.map +1 -1
  192. package/fesm2015/pepperi-addons-ngx-lib-profile-data-views-list.mjs +81 -33
  193. package/fesm2015/pepperi-addons-ngx-lib-profile-data-views-list.mjs.map +1 -1
  194. package/fesm2015/pepperi-addons-ngx-lib-quantity-selector.mjs +66 -31
  195. package/fesm2015/pepperi-addons-ngx-lib-quantity-selector.mjs.map +1 -1
  196. package/fesm2015/pepperi-addons-ngx-lib-query-builder.mjs +140 -81
  197. package/fesm2015/pepperi-addons-ngx-lib-query-builder.mjs.map +1 -1
  198. package/fesm2015/pepperi-addons-ngx-lib-remote-loader.mjs +169 -83
  199. package/fesm2015/pepperi-addons-ngx-lib-remote-loader.mjs.map +1 -1
  200. package/fesm2015/pepperi-addons-ngx-lib-reset-configuration-field.mjs +95 -0
  201. package/fesm2015/pepperi-addons-ngx-lib-reset-configuration-field.mjs.map +1 -0
  202. package/fesm2015/pepperi-addons-ngx-lib-rich-html-textarea.mjs +18 -2
  203. package/fesm2015/pepperi-addons-ngx-lib-rich-html-textarea.mjs.map +1 -1
  204. package/fesm2015/pepperi-addons-ngx-lib-search.mjs +45 -15
  205. package/fesm2015/pepperi-addons-ngx-lib-search.mjs.map +1 -1
  206. package/fesm2015/pepperi-addons-ngx-lib-select-panel.mjs +3 -5
  207. package/fesm2015/pepperi-addons-ngx-lib-select-panel.mjs.map +1 -1
  208. package/fesm2015/pepperi-addons-ngx-lib-select.mjs +123 -51
  209. package/fesm2015/pepperi-addons-ngx-lib-select.mjs.map +1 -1
  210. package/fesm2015/pepperi-addons-ngx-lib-side-bar.mjs +17 -3
  211. package/fesm2015/pepperi-addons-ngx-lib-side-bar.mjs.map +1 -1
  212. package/fesm2015/pepperi-addons-ngx-lib-signature.mjs +173 -81
  213. package/fesm2015/pepperi-addons-ngx-lib-signature.mjs.map +1 -1
  214. package/fesm2015/pepperi-addons-ngx-lib-size-detector.mjs +15 -5
  215. package/fesm2015/pepperi-addons-ngx-lib-size-detector.mjs.map +1 -1
  216. package/fesm2015/pepperi-addons-ngx-lib-skeleton-loader.mjs +33 -9
  217. package/fesm2015/pepperi-addons-ngx-lib-skeleton-loader.mjs.map +1 -1
  218. package/fesm2015/pepperi-addons-ngx-lib-slider.mjs +2 -2
  219. package/fesm2015/pepperi-addons-ngx-lib-slider.mjs.map +1 -1
  220. package/fesm2015/pepperi-addons-ngx-lib-smart-filters.mjs +53 -30
  221. package/fesm2015/pepperi-addons-ngx-lib-smart-filters.mjs.map +1 -1
  222. package/fesm2015/pepperi-addons-ngx-lib-snack-bar.mjs +18 -3
  223. package/fesm2015/pepperi-addons-ngx-lib-snack-bar.mjs.map +1 -1
  224. package/fesm2015/pepperi-addons-ngx-lib-textarea.mjs +11 -2
  225. package/fesm2015/pepperi-addons-ngx-lib-textarea.mjs.map +1 -1
  226. package/fesm2015/pepperi-addons-ngx-lib-textbox-icon.mjs +2 -2
  227. package/fesm2015/pepperi-addons-ngx-lib-textbox-icon.mjs.map +1 -1
  228. package/fesm2015/pepperi-addons-ngx-lib-textbox.mjs +87 -12
  229. package/fesm2015/pepperi-addons-ngx-lib-textbox.mjs.map +1 -1
  230. package/fesm2015/pepperi-addons-ngx-lib-top-bar.mjs +26 -15
  231. package/fesm2015/pepperi-addons-ngx-lib-top-bar.mjs.map +1 -1
  232. package/fesm2015/pepperi-addons-ngx-lib.mjs +3420 -577
  233. package/fesm2015/pepperi-addons-ngx-lib.mjs.map +1 -1
  234. package/fesm2020/pepperi-addons-ngx-lib-address.mjs +92 -5
  235. package/fesm2020/pepperi-addons-ngx-lib-address.mjs.map +1 -1
  236. package/fesm2020/pepperi-addons-ngx-lib-attachment.mjs +15 -5
  237. package/fesm2020/pepperi-addons-ngx-lib-attachment.mjs.map +1 -1
  238. package/fesm2020/pepperi-addons-ngx-lib-carousel.mjs +13 -3
  239. package/fesm2020/pepperi-addons-ngx-lib-carousel.mjs.map +1 -1
  240. package/fesm2020/pepperi-addons-ngx-lib-checkbox.mjs +36 -2
  241. package/fesm2020/pepperi-addons-ngx-lib-checkbox.mjs.map +1 -1
  242. package/fesm2020/pepperi-addons-ngx-lib-chips.mjs +11 -25
  243. package/fesm2020/pepperi-addons-ngx-lib-chips.mjs.map +1 -1
  244. package/fesm2020/pepperi-addons-ngx-lib-color.mjs +4 -4
  245. package/fesm2020/pepperi-addons-ngx-lib-color.mjs.map +1 -1
  246. package/fesm2020/pepperi-addons-ngx-lib-date.mjs +34 -12
  247. package/fesm2020/pepperi-addons-ngx-lib-date.mjs.map +1 -1
  248. package/fesm2020/pepperi-addons-ngx-lib-dialog.mjs +2 -2
  249. package/fesm2020/pepperi-addons-ngx-lib-dialog.mjs.map +1 -1
  250. package/fesm2020/pepperi-addons-ngx-lib-draggable-items.mjs +54 -19
  251. package/fesm2020/pepperi-addons-ngx-lib-draggable-items.mjs.map +1 -1
  252. package/fesm2020/pepperi-addons-ngx-lib-field-title.mjs +5 -2
  253. package/fesm2020/pepperi-addons-ngx-lib-field-title.mjs.map +1 -1
  254. package/fesm2020/pepperi-addons-ngx-lib-files-uploader.mjs +22 -31
  255. package/fesm2020/pepperi-addons-ngx-lib-files-uploader.mjs.map +1 -1
  256. package/fesm2020/pepperi-addons-ngx-lib-form.mjs +31 -25
  257. package/fesm2020/pepperi-addons-ngx-lib-form.mjs.map +1 -1
  258. package/fesm2020/pepperi-addons-ngx-lib-group-buttons.mjs +2 -2
  259. package/fesm2020/pepperi-addons-ngx-lib-group-buttons.mjs.map +1 -1
  260. package/fesm2020/pepperi-addons-ngx-lib-icon.mjs +39 -5
  261. package/fesm2020/pepperi-addons-ngx-lib-icon.mjs.map +1 -1
  262. package/fesm2020/pepperi-addons-ngx-lib-image.mjs +15 -5
  263. package/fesm2020/pepperi-addons-ngx-lib-image.mjs.map +1 -1
  264. package/fesm2020/pepperi-addons-ngx-lib-images-filmstrip.mjs +98 -24
  265. package/fesm2020/pepperi-addons-ngx-lib-images-filmstrip.mjs.map +1 -1
  266. package/fesm2020/pepperi-addons-ngx-lib-json-editor.mjs +403 -0
  267. package/fesm2020/pepperi-addons-ngx-lib-json-editor.mjs.map +1 -0
  268. package/fesm2020/pepperi-addons-ngx-lib-link.mjs +24 -3
  269. package/fesm2020/pepperi-addons-ngx-lib-link.mjs.map +1 -1
  270. package/fesm2020/pepperi-addons-ngx-lib-list.mjs +238 -42
  271. package/fesm2020/pepperi-addons-ngx-lib-list.mjs.map +1 -1
  272. package/fesm2020/pepperi-addons-ngx-lib-menu.mjs +8 -4
  273. package/fesm2020/pepperi-addons-ngx-lib-menu.mjs.map +1 -1
  274. package/fesm2020/pepperi-addons-ngx-lib-page-layout.mjs +27 -6
  275. package/fesm2020/pepperi-addons-ngx-lib-page-layout.mjs.map +1 -1
  276. package/fesm2020/pepperi-addons-ngx-lib-profile-data-views-list.mjs +81 -33
  277. package/fesm2020/pepperi-addons-ngx-lib-profile-data-views-list.mjs.map +1 -1
  278. package/fesm2020/pepperi-addons-ngx-lib-quantity-selector.mjs +65 -31
  279. package/fesm2020/pepperi-addons-ngx-lib-quantity-selector.mjs.map +1 -1
  280. package/fesm2020/pepperi-addons-ngx-lib-query-builder.mjs +136 -80
  281. package/fesm2020/pepperi-addons-ngx-lib-query-builder.mjs.map +1 -1
  282. package/fesm2020/pepperi-addons-ngx-lib-remote-loader.mjs +157 -69
  283. package/fesm2020/pepperi-addons-ngx-lib-remote-loader.mjs.map +1 -1
  284. package/fesm2020/pepperi-addons-ngx-lib-reset-configuration-field.mjs +95 -0
  285. package/fesm2020/pepperi-addons-ngx-lib-reset-configuration-field.mjs.map +1 -0
  286. package/fesm2020/pepperi-addons-ngx-lib-rich-html-textarea.mjs +18 -2
  287. package/fesm2020/pepperi-addons-ngx-lib-rich-html-textarea.mjs.map +1 -1
  288. package/fesm2020/pepperi-addons-ngx-lib-search.mjs +42 -15
  289. package/fesm2020/pepperi-addons-ngx-lib-search.mjs.map +1 -1
  290. package/fesm2020/pepperi-addons-ngx-lib-select-panel.mjs +3 -5
  291. package/fesm2020/pepperi-addons-ngx-lib-select-panel.mjs.map +1 -1
  292. package/fesm2020/pepperi-addons-ngx-lib-select.mjs +122 -51
  293. package/fesm2020/pepperi-addons-ngx-lib-select.mjs.map +1 -1
  294. package/fesm2020/pepperi-addons-ngx-lib-side-bar.mjs +17 -3
  295. package/fesm2020/pepperi-addons-ngx-lib-side-bar.mjs.map +1 -1
  296. package/fesm2020/pepperi-addons-ngx-lib-signature.mjs +169 -81
  297. package/fesm2020/pepperi-addons-ngx-lib-signature.mjs.map +1 -1
  298. package/fesm2020/pepperi-addons-ngx-lib-size-detector.mjs +15 -5
  299. package/fesm2020/pepperi-addons-ngx-lib-size-detector.mjs.map +1 -1
  300. package/fesm2020/pepperi-addons-ngx-lib-skeleton-loader.mjs +33 -9
  301. package/fesm2020/pepperi-addons-ngx-lib-skeleton-loader.mjs.map +1 -1
  302. package/fesm2020/pepperi-addons-ngx-lib-slider.mjs +2 -2
  303. package/fesm2020/pepperi-addons-ngx-lib-slider.mjs.map +1 -1
  304. package/fesm2020/pepperi-addons-ngx-lib-smart-filters.mjs +53 -30
  305. package/fesm2020/pepperi-addons-ngx-lib-smart-filters.mjs.map +1 -1
  306. package/fesm2020/pepperi-addons-ngx-lib-snack-bar.mjs +18 -3
  307. package/fesm2020/pepperi-addons-ngx-lib-snack-bar.mjs.map +1 -1
  308. package/fesm2020/pepperi-addons-ngx-lib-textarea.mjs +11 -2
  309. package/fesm2020/pepperi-addons-ngx-lib-textarea.mjs.map +1 -1
  310. package/fesm2020/pepperi-addons-ngx-lib-textbox-icon.mjs +2 -2
  311. package/fesm2020/pepperi-addons-ngx-lib-textbox-icon.mjs.map +1 -1
  312. package/fesm2020/pepperi-addons-ngx-lib-textbox.mjs +85 -12
  313. package/fesm2020/pepperi-addons-ngx-lib-textbox.mjs.map +1 -1
  314. package/fesm2020/pepperi-addons-ngx-lib-top-bar.mjs +25 -14
  315. package/fesm2020/pepperi-addons-ngx-lib-top-bar.mjs.map +1 -1
  316. package/fesm2020/pepperi-addons-ngx-lib.mjs +3416 -574
  317. package/fesm2020/pepperi-addons-ngx-lib.mjs.map +1 -1
  318. package/field-title/field-title.component.d.ts +2 -1
  319. package/files-uploader/files-uploader.component.d.ts +4 -2
  320. package/form/internal-carusel.component.d.ts +1 -0
  321. package/form/internal-menu.component.d.ts +1 -2
  322. package/icon/icon.component.d.ts +4 -0
  323. package/image/image.component.d.ts +3 -1
  324. package/images-filmstrip/images-filmstrip.component.d.ts +24 -8
  325. package/json-editor/index.d.ts +5 -0
  326. package/json-editor/json-editor.component.d.ts +75 -0
  327. package/json-editor/json-editor.component.theme.scss +5 -0
  328. package/json-editor/json-editor.module.d.ts +24 -0
  329. package/json-editor/json-tree-node.component.d.ts +18 -0
  330. package/json-editor/public-api.d.ts +2 -0
  331. package/lib/i18n/embedded-i18n.d.ts +1 -0
  332. package/link/link.component.d.ts +7 -2
  333. package/list/list-total.component.d.ts +2 -1
  334. package/list/list.component.d.ts +21 -5
  335. package/list/list.model.d.ts +2 -1
  336. package/menu/menu.component.d.ts +2 -1
  337. package/menu/menu.model.d.ts +1 -0
  338. package/package.json +18 -2
  339. package/page-layout/page-layout.component.d.ts +8 -2
  340. package/profile-data-views-list/profile-data-view/profile-data-view.component.d.ts +3 -3
  341. package/profile-data-views-list/profile-data-views-card/profile-data-views-card.component.d.ts +5 -4
  342. package/profile-data-views-list/profile-data-views-list.component.d.ts +13 -10
  343. package/profile-data-views-list/profile-data-views-list.model.d.ts +8 -0
  344. package/public-api.d.ts +1 -0
  345. package/quantity-selector/quantity-selector.component.d.ts +9 -9
  346. package/query-builder/common/model/legacy.d.ts +2 -0
  347. package/query-builder/common/model/operator.d.ts +11 -1
  348. package/query-builder/common/services/query-structure.service.d.ts +1 -0
  349. package/query-builder/query-builder-item/query-builder-item.component.d.ts +3 -1
  350. package/query-builder/query-builder.module.d.ts +7 -3
  351. package/remote-loader/addon-block-loader.component.d.ts +4 -2
  352. package/remote-loader/remote-loader-element.component.d.ts +8 -1
  353. package/remote-loader/remote-loader.model.d.ts +1 -0
  354. package/remote-loader/remote-loader.service.d.ts +3 -1
  355. package/reset-configuration-field/index.d.ts +5 -0
  356. package/reset-configuration-field/public-api.d.ts +2 -0
  357. package/reset-configuration-field/reset-configuration-field.component.d.ts +23 -0
  358. package/reset-configuration-field/reset-configuration-field.module.d.ts +12 -0
  359. package/rich-html-textarea/rich-html-textarea.component.d.ts +4 -1
  360. package/rich-html-textarea/rich-html-textarea.component.theme.scss +4 -2
  361. package/search/search.component.d.ts +9 -3
  362. package/select/select.component.d.ts +18 -2
  363. package/select-panel/select-panel.component.d.ts +1 -2
  364. package/side-bar/side-bar.component.d.ts +4 -1
  365. package/signature/public-api.d.ts +1 -0
  366. package/signature/signature-dialog.component.d.ts +29 -0
  367. package/signature/signature.component.d.ts +3 -13
  368. package/signature/signature.module.d.ts +16 -15
  369. package/size-detector/size-detector.component.d.ts +6 -3
  370. package/skeleton-loader/skeleton-loader.component.d.ts +15 -7
  371. package/slider/slider.component.theme.scss +4 -0
  372. package/smart-filters/boolean-filter/boolean-filter.component.d.ts +3 -0
  373. package/smart-filters/common/model/base-filter-component.d.ts +2 -4
  374. package/smart-filters/common/model/operator.d.ts +3 -0
  375. package/smart-filters/common/model/type.d.ts +1 -1
  376. package/smart-filters/date-filter/date-filter.component.d.ts +3 -0
  377. package/smart-filters/multi-select-filter/multi-select-filter.component.d.ts +3 -0
  378. package/smart-filters/number-filter/number-filter.component.d.ts +3 -0
  379. package/smart-filters/text-filter/text-filter.component.d.ts +4 -0
  380. package/snack-bar/snack-bar.component.d.ts +9 -4
  381. package/src/assets/i18n/ar.ngx-lib.json +180 -0
  382. package/src/assets/i18n/de.ngx-lib.json +106 -4
  383. package/src/assets/i18n/en.ngx-lib.json +14 -3
  384. package/src/assets/i18n/es.ngx-lib.json +113 -11
  385. package/src/assets/i18n/fr.ngx-lib.json +105 -4
  386. package/src/assets/i18n/he.ngx-lib.json +105 -4
  387. package/src/assets/i18n/it.ngx-lib.json +114 -13
  388. package/src/assets/i18n/ja.ngx-lib.json +105 -4
  389. package/src/assets/i18n/pl.ngx-lib.json +105 -4
  390. package/src/assets/i18n/pt.ngx-lib.json +105 -4
  391. package/src/assets/i18n/sr.ngx-lib.json +180 -0
  392. package/src/assets/i18n/zh.ngx-lib.json +105 -2
  393. package/src/core/style/abstracts/mixins.scss +135 -26
  394. package/src/core/style/abstracts/variables.scss +10 -1
  395. package/src/core/style/base/Spacing.stories.mdx +22 -22
  396. package/src/core/style/base/base.scss +16 -14
  397. package/src/core/style/base/typography.scss +2 -1
  398. package/src/core/style/components/button.scss +11 -0
  399. package/src/core/style/components/checkbox.scss +13 -63
  400. package/src/core/style/components/file.scss +4 -4
  401. package/src/core/style/components/general.scss +27 -9
  402. package/src/core/style/components/textarea.scss +13 -0
  403. package/textarea/textarea.component.d.ts +2 -1
  404. package/textbox/textbox.component.d.ts +10 -3
  405. package/theming.scss +5 -1
  406. package/top-bar/top-bar.component.d.ts +2 -0
  407. package/src/assets/images/sail-away.jpg +0 -0
  408. package/src/core/style/abstracts/AbstractsIntro.stories.mdx +0 -7
@@ -54,6 +54,7 @@ export class PepCustomizationService {
54
54
  field.disabled ? formControl.disable() : formControl.enable();
55
55
  const validators = field.getValidators();
56
56
  formControl.setValidators(validators);
57
+ formControl.updateValueAndValidity();
57
58
  }
58
59
  }
59
60
  }
@@ -428,6 +429,14 @@ export class PepCustomizationService {
428
429
  themeVars[PepCustomizationService.COLOR_QS_KEY + '-l'] =
429
430
  'var(' + PepCustomizationService.COLOR_SYSTEM_PRIMARY_KEY + '-l)';
430
431
  }
432
+ getDefaultThemeLoaderCustomizationVariables(themeVars) {
433
+ themeVars[PepCustomizationService.COLOR_LOADER_KEY + '-h'] =
434
+ 'var(' + PepCustomizationService.COLOR_SYSTEM_CAUTION_KEY + '-h)';
435
+ themeVars[PepCustomizationService.COLOR_LOADER_KEY + '-s'] =
436
+ 'var(' + PepCustomizationService.COLOR_SYSTEM_CAUTION_KEY + '-s)';
437
+ themeVars[PepCustomizationService.COLOR_LOADER_KEY + '-l'] =
438
+ 'var(' + PepCustomizationService.COLOR_SYSTEM_CAUTION_KEY + '-l)';
439
+ }
431
440
  getDefaultThemeTopHeaderCustomizationVariables(themeVars) {
432
441
  const topHeaderState = 'strong';
433
442
  themeVars[PepCustomizationService.STYLE_TOP_HEADER_KEY] = topHeaderState;
@@ -435,6 +444,15 @@ export class PepCustomizationService {
435
444
  themeVars[PepCustomizationService.COLOR_TOP_HEADER_KEY + '-s'] = '';
436
445
  themeVars[PepCustomizationService.COLOR_TOP_HEADER_KEY + '-l'] = '';
437
446
  }
447
+ getDefaultThemeTopLegacyCustomizationVariables(themeVars) {
448
+ themeVars[PepCustomizationService.COLOR_TOP_LEGACY_KEY + '-h'] = '';
449
+ themeVars[PepCustomizationService.COLOR_TOP_LEGACY_KEY + '-s'] = '';
450
+ themeVars[PepCustomizationService.COLOR_TOP_LEGACY_KEY + '-l'] = '';
451
+ }
452
+ // getDefaultThemeBrandingCustomizationVariables(themeVars: any): void {
453
+ // themeVars[PepCustomizationService.BRANDING_LOGO_SRC] = '/assets/images/Pepperi-Logo-HiRes.png';
454
+ // themeVars[PepCustomizationService.FAV_ICON_SRC] = '/assets/favicon.ico';
455
+ // }
438
456
  getDefaultThemeVariables() {
439
457
  const themeVars = {};
440
458
  // Declare default layout.
@@ -461,6 +479,10 @@ export class PepCustomizationService {
461
479
  this.getDefaultThemeQSCustomizationVariables(themeVars);
462
480
  // Declare default top header customization.
463
481
  this.getDefaultThemeTopHeaderCustomizationVariables(themeVars);
482
+ // Declare default top legacy customization.
483
+ this.getDefaultThemeTopLegacyCustomizationVariables(themeVars);
484
+ // // Declare default branding logo's customization
485
+ // this.getDefaultThemeBrandingCustomizationVariables(themeVars);
464
486
  return themeVars;
465
487
  }
466
488
  getThemeVariables() {
@@ -687,8 +709,11 @@ PepCustomizationService.COLOR_STRONG_KEY = '--pep-color-strong';
687
709
  PepCustomizationService.COLOR_REGULAR_KEY = '--pep-color-regular';
688
710
  PepCustomizationService.COLOR_WEAK_KEY = '--pep-color-weak';
689
711
  // Top header variables keys
712
+ PepCustomizationService.COLOR_TOP_LEGACY_KEY = '--pep-color-legacy';
690
713
  PepCustomizationService.COLOR_TOP_HEADER_KEY = '--pep-color-top-header';
691
714
  PepCustomizationService.STYLE_TOP_HEADER_KEY = '--pep-style-top-header';
715
+ // Loader variables keys
716
+ PepCustomizationService.COLOR_LOADER_KEY = '--pep-color-loader';
692
717
  // QS variables keys
693
718
  PepCustomizationService.COLOR_QS_KEY = '--pep-color-qs';
694
719
  PepCustomizationService.STYLE_QS_KEY = '--pep-style-qs';
@@ -757,6 +782,9 @@ PepCustomizationService.CARD_BORDER_RADIUS_KEY = '--pep-card-border-radius';
757
782
  PepCustomizationService.TABLE_FIELD_HEIGHT_KEY = '--pep-table-field-height';
758
783
  PepCustomizationService.TABLE_SPACEING_KEY = '--pep-table-spacing';
759
784
  PepCustomizationService.TABLE_BORDER_RADIUS_KEY = '--pep-table-border-radius';
785
+ // // Branding keys
786
+ // static BRANDING_LOGO_SRC = '--pep-branding-logo-src';
787
+ // static FAV_ICON_SRC = '--pep-favicon-src';
760
788
  PepCustomizationService.DEFAULT_HEADER_HEIGHT = 64; // Default
761
789
  PepCustomizationService.DEFAULT_SPINNER_COLOR = '#78aa00';
762
790
  PepCustomizationService.DEFAULT_BRANDING_COLOR = '#fff';
@@ -768,4 +796,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
768
796
  providedIn: 'root',
769
797
  }]
770
798
  }], ctorParameters: function () { return [{ type: i1.PepSessionService }, { type: i2.PepFileService }, { type: i3.FormBuilder }]; } });
771
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9taXphdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpYi9zcmMvY29yZS9jdXN0b21pemF0aW9uL2N1c3RvbWl6YXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7O0FBUXZDLE1BQU0sT0FBTyx1QkFBdUI7SUFpSmhDLFlBQ1ksY0FBaUMsRUFDakMsV0FBMkIsRUFDNUIsRUFBZTtRQUZkLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUNqQyxnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFDNUIsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQVZuQixzQkFBaUIsR0FBWSxJQUFJLENBQUM7UUFDbEMsb0JBQWUsR0FBWSxJQUFJLENBQUM7UUFDaEMsdUJBQWtCLEdBQUcsdUJBQXVCLENBQUMscUJBQXFCLENBQUM7UUFDbkUsbUJBQWMsR0FBRyxDQUFDLENBQUM7UUFDbkIsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUM5QyxrQkFBYSxHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBT2xELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQixFQUFFO0lBQ04sQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQW1CLEVBQUUsY0FBYyxHQUFHLElBQUk7UUFDMUQsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMvRCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDakIsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRztZQUNmLEVBQUUsS0FBSyxFQUFF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QixDQUFDO1lBQ25ELE9BQU8sR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7UUFDakQsU0FBUyxDQUFDLHVCQUF1QixDQUFDLG9CQUFvQixDQUFDO1lBQ25ELE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7UUFDaEQsU0FBUyxDQUFDLHVCQUF1QixDQUFDLG9CQUFvQixDQUFDO1lBQ25ELEtBQUssR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7UUFDL0MsU0FBUyxDQUFDLHVCQUF1QixDQUFDLG9CQUFvQixDQUFDO1lBQ25ELEdBQUcsR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7SUFDakQsQ0FBQztJQUVELCtCQUErQixDQUFDLFNBQWM7UUFDMUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLG9CQUFvQixDQUFDO1lBQ25ELE9BQU8sR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7UUFDakQsU0FBUyxDQUFDLHVCQUF1QixDQUFDLG1CQUFtQixDQUFDO1lBQ2xELE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7UUFDaEQsU0FBUyxDQUFDLHVCQUF1QixDQUFDLG1CQUFtQixDQUFDO1lBQ2xELEtBQUssR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7UUFDL0MsU0FBUyxDQUFDLHVCQUF1QixDQUFDLG1CQUFtQixDQUFDO1lBQ2xELE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7UUFDaEQsU0FBUyxDQUFDLHVCQUF1QixDQUFDLG1CQUFtQixDQUFDO1lBQ2xELEdBQUcsR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7UUFDN0MsU0FBUyxDQUFDLHVCQUF1QixDQUFDLG1CQUFtQixDQUFDO1lBQ2xELEtBQUssR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7UUFDL0MsU0FBUyxDQUFDLHVCQUF1QixDQUFDLG9CQUFvQixDQUFDO1lBQ25ELEdBQUcsR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7UUFDN0MsU0FBUyxDQUFDLHVCQUF1QixDQUFDLG9CQUFvQixDQUFDO1lB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RywwQkFBMEIsQ0FBQztBQUNwRCwwQ0FBa0IsR0FBRyxxQkFBcUIsQ0FBQztBQUMzQywrQ0FBdUIsR0FBRywyQkFBMkIsQ0FBQztBQUV0RCw2Q0FBcUIsR0FBRyxFQUFFLENBQUMsQ0FBQyxVQUFVO0FBRXRDLDZDQUFxQixHQUFHLFNBQVMsQ0FBQztBQUNsQyw4Q0FBc0IsR0FBRyxNQUFNLENBQUM7b0hBeEk5Qix1QkFBdUI7d0hBQXZCLHVCQUF1QixjQUZwQixNQUFNOzJGQUVULHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUGVwU2Vzc2lvblNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vc2VydmljZXMvc2Vzc2lvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFBlcEZpbGVTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL3NlcnZpY2VzL2ZpbGUuc2VydmljZSc7XG5pbXBvcnQgeyBQZXBTdHlsZVR5cGUsIFBlcEZpZWxkQmFzZSB9IGZyb20gJy4vY3VzdG9taXphdGlvbi5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlIHtcbiAgICBzdGF0aWMgU1RBTkRfQUxPTkVfRklFTERfQ0xBU1NfTkFNRSA9ICdwZXAtZmllbGQnO1xuICAgIHN0YXRpYyBTVEFORF9BTE9ORV9GSUVMRF9OT19TUEFDSU5HX0NMQVNTX05BTUUgPSAncGVwLWZpZWxkLW5vLXNwYWNpbmcnO1xuXG4gICAgc3RhdGljIFJFTV9TVFJJTkcgPSAncmVtJztcbiAgICBzdGF0aWMgUFhfU1RSSU5HID0gJ3B4JztcbiAgICBzdGF0aWMgVVNFUl9USEVNRSA9ICd1c2VyX3RoZW1lJztcbiAgICBzdGF0aWMgVVNFUl9DT0xPUiA9ICd1c2VyX2NvbG9yJztcbiAgICBzdGF0aWMgVVNFUl9USEVNRV9WQVJJQUJMRVMgPSAndXNlcl90aGVtZV92YXJpYWJsZXMnO1xuXG4gICAgLy8gSGVhZGVyIGhlaWdodFxuICAgIHN0YXRpYyBIRUFERVJfSEVJR0hUX0tFWSA9ICctLXBlcC1oZWFkZXItaGVpZ2h0JztcblxuICAgIC8vIFNpZGUgYmFyIHZhcmlhYmxlcyBrZXlzXG4gICAgc3RhdGljIFNJREVfQkFSX1dJRFRIX0tFWSA9ICctLXBlcC1zaWRlLWJhci13aWR0aCc7XG5cbiAgICAvLyBTZXR0aW5ncyB3aWR0aFxuICAgIHN0YXRpYyBTRVRUSU5HU19XSURUSF9LRVkgPSAnLS1wZXAtc2V0dGluZ3MtYmFyLXdpZHRoJztcblxuICAgIC8vIFRvcCBiYXIgdmFyaWFibGVzIGtleXNcbiAgICBzdGF0aWMgVE9QX0JBUl9TUEFDSU5HX1RPUF9LRVkgPSAnLS1wZXAtdG9wLWJhci1zcGFjaW5nLXRvcCc7XG4gICAgc3RhdGljIFRPUF9CQVJfU1BBQ0lOR19CT1RUT01fS0VZID0gJy0tcGVwLXRvcC1iYXItc3BhY2luZy1ib3R0b20nO1xuICAgIHN0YXRpYyBUT1BfQkFSX0ZJRUxEX0hFSUdIVF9LRVkgPSAnLS1wZXAtdG9wLWJhci1maWVsZC1oZWlnaHQnO1xuXG4gICAgLy8gRm9vdGVyIHZhcmlhYmxlcyBrZXlzXG4gICAgc3RhdGljIEZPT1RFUl9IRUlHSFRfS0VZID0gJy0tcGVwLWZvb3Rlci1iYXItaGVpZ2h0JztcbiAgICBzdGF0aWMgRk9PVEVSX0JBUl9TUEFDSU5HX1RPUF9LRVkgPSAnLS1wZXAtZm9vdGVyLWJhci1zcGFjaW5nLXRvcCc7XG4gICAgc3RhdGljIEZPT1RFUl9CQVJfU1BBQ0lOR19CT1RUT01fS0VZID0gJy0tcGVwLWZvb3Rlci1iYXItc3BhY2luZy1ib3R0b20nO1xuXG4gICAgLy8gTWFpbiBjb250YWluZXIgaGVpZ2h0XG4gICAgc3RhdGljIE1BSU5fSEVJR0hUX0tFWSA9ICctLXBlcC1tYWluLWhlaWdodCc7XG5cbiAgICAvLyBDb2xvcnMgdmFyaWFibGVzIGtleXNcbiAgICBzdGF0aWMgQ09MT1JfVVNFUl9QUklNQVJZX0tFWSA9ICctLXBlcC1jb2xvci11c2VyLXByaW1hcnknO1xuICAgIHN0YXRpYyBDT0xPUl9VU0VSX1NFQ09OREFSWV9LRVkgPSAnLS1wZXAtY29sb3ItdXNlci1zZWNvbmRhcnknO1xuICAgIHN0YXRpYyBDT0xPUl9TWVNURU1fUFJJTUFSWV9JTlZFUlRfS0VZID1cbiAgICAgICAgJy0tcGVwLWNvbG9yLXN5c3RlbS1wcmltYXJ5LWludmVydCc7XG4gICAgc3RhdGljIENPTE9SX1NZU1RFTV9QUklNQVJZX0tFWSA9ICctLXBlcC1jb2xvci1zeXN0ZW0tcHJpbWFyeSc7XG4gICAgc3RhdGljIENPTE9SX1RFWFRfTElOS19LRVkgPSAnLS1wZXAtY29sb3ItdGV4dC1saW5rJztcbiAgICBzdGF0aWMgQ09MT1JfU1lTVEVNX0NBVVRJT05fS0VZID0gJy0tcGVwLWNvbG9yLXN5c3RlbS1jYXV0aW9uJztcbiAgICBzdGF0aWMgQ09MT1JfU1lTVEVNX1NVQ0NFU1NfS0VZID0gJy0tcGVwLWNvbG9yLXN5c3RlbS1zdWNjZXNzJztcbiAgICBzdGF0aWMgQ09MT1JfU1RST05HX0tFWSA9ICctLXBlcC1jb2xvci1zdHJvbmcnO1xuICAgIHN0YXRpYyBDT0xPUl9SRUdVTEFSX0tFWSA9ICctLXBlcC1jb2xvci1yZWd1bGFyJztcbiAgICBzdGF0aWMgQ09MT1JfV0VBS19LRVkgPSAnLS1wZXAtY29sb3Itd2Vhayc7XG5cbiAgICAvLyBUb3AgaGVhZGVyIHZhcmlhYmxlcyBrZXlzXG4gICAgc3RhdGljIENPTE9SX1RPUF9IRUFERVJfS0VZID0gJy0tcGVwLWNvbG9yLXRvcC1oZWFkZXInO1xuICAgIHN0YXRpYyBTVFlMRV9UT1BfSEVBREVSX0tFWSA9ICctLXBlcC1zdHlsZS10b3AtaGVhZGVyJztcblxuICAgIC8vIFFTIHZhcmlhYmxlcyBrZXlzXG4gICAgc3RhdGljIENPTE9SX1FTX0tFWSA9ICctLXBlcC1jb2xvci1xcyc7XG4gICAgc3RhdGljIFNUWUxFX1FTX0tFWSA9ICctLXBlcC1zdHlsZS1xcyc7XG5cbiAgICAvLyBGb250cyB2YXJpYWJsZXMga2V5c1xuICAgIHN0YXRpYyBGT05UX0ZBTUlMWV9USVRMRV9LRVkgPSAnLS1wZXAtZm9udC1mYW1pbHktdGl0bGUnO1xuICAgIHN0YXRpYyBGT05UX0ZBTUlMWV9USVRMRV9OT1JNQUxfVVJMX0tFWSA9XG4gICAgICAgICctLXBlcC1mb250LWZhbWlseS10aXRsZS1ub3JtYWwtdXJsJztcbiAgICBzdGF0aWMgRk9OVF9GQU1JTFlfVElUTEVfQk9MRF9VUkxfS0VZID0gJy0tcGVwLWZvbnQtZmFtaWx5LXRpdGxlLWJvbGQtdXJsJztcbiAgICBzdGF0aWMgRk9OVF9GQU1JTFlfQk9EWV9LRVkgPSAnLS1wZXAtZm9udC1mYW1pbHktYm9keSc7XG4gICAgc3RhdGljIEZPTlRfRkFNSUxZX0JPRFlfTk9STUFMX1VSTF9LRVkgPVxuICAgICAgICAnLS1wZXAtZm9udC1mYW1pbHktYm9keS1ub3JtYWwtdXJsJztcbiAgICBzdGF0aWMgRk9OVF9GQU1JTFlfQk9EWV9CT0xEX1VSTF9LRVkgPSAnLS1wZXAtZm9udC1mYW1pbHktYm9keS1ib2xkLXVybCc7XG5cbiAgICAvLyBCb3JkZXIgcmFkaXVzIHZhcmlhYmxlcyBrZXlzXG4gICAgc3RhdGljIEJPUkRFUl9SQURJVVNfS0VZID0gJy0tcGVwLWJvcmRlci1yYWRpdXMnO1xuICAgIHN0YXRpYyBCT1JERVJfUkFESVVTX1NNX0tFWSA9XG4gICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkJPUkRFUl9SQURJVVNfS0VZICsgJy1zbSc7XG4gICAgc3RhdGljIEJPUkRFUl9SQURJVVNfTURfS0VZID1cbiAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQk9SREVSX1JBRElVU19LRVkgKyAnLW1kJztcbiAgICBzdGF0aWMgQk9SREVSX1JBRElVU19MR19LRVkgPVxuICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5CT1JERVJfUkFESVVTX0tFWSArICctbGcnO1xuICAgIHN0YXRpYyBCT1JERVJfUkFESVVTX1hMX0tFWSA9XG4gICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkJPUkRFUl9SQURJVVNfS0VZICsgJy14bCc7XG5cbiAgICAvLyBGb250cyB2YXJpYWJsZXMga2V5c1xuICAgIHN0YXRpYyBGT05UX1NJWkVfMlhTX0tFWSA9ICctLXBlcC1mb250LXNpemUtMnhzJztcbiAgICBzdGF0aWMgRk9OVF9TSVpFX1hTX0tFWSA9ICctLXBlcC1mb250LXNpemUteHMnO1xuICAgIHN0YXRpYyBGT05UX1NJWkVfU01fS0VZID0gJy0tcGVwLWZvbnQtc2l6ZS1zbSc7XG4gICAgc3RhdGljIEZPTlRfU0laRV9NRF9LRVkgPSAnLS1wZXAtZm9udC1zaXplLW1kJztcbiAgICBzdGF0aWMgRk9OVF9TSVpFX0xHX0tFWSA9ICctLXBlcC1mb250LXNpemUtbGcnO1xuICAgIHN0YXRpYyBGT05UX1NJWkVfWExfS0VZID0gJy0tcGVwLWZvbnQtc2l6ZS14bCc7XG4gICAgc3RhdGljIEZPTlRfU0laRV8yWExfS0VZID0gJy0tcGVwLWZvbnQtc2l6ZS0yeGwnO1xuXG4gICAgLy8gTGluZSBoZWlnaHQgdmFyaWFibGVzIGtleXNcbiAgICBzdGF0aWMgTElORV9IRUlHSFRfMlhTX0tFWSA9ICctLXBlcC1saW5lLWhlaWdodC0yeHMnO1xuICAgIHN0YXRpYyBMSU5FX0hFSUdIVF9YU19LRVkgPSAnLS1wZXAtbGluZS1oZWlnaHQteHMnO1xuICAgIHN0YXRpYyBMSU5FX0hFSUdIVF9TTV9LRVkgPSAnLS1wZXAtbGluZS1oZWlnaHQtc20nO1xuICAgIHN0YXRpYyBMSU5FX0hFSUdIVF9NRF9LRVkgPSAnLS1wZXAtbGluZS1oZWlnaHQtbWQnO1xuICAgIHN0YXRpYyBMSU5FX0hFSUdIVF9MR19LRVkgPSAnLS1wZXAtbGluZS1oZWlnaHQtbGcnO1xuICAgIHN0YXRpYyBMSU5FX0hFSUdIVF9YTF9LRVkgPSAnLS1wZXAtbGluZS1oZWlnaHQteGwnO1xuICAgIHN0YXRpYyBMSU5FX0hFSUdIVF8yWExfS0VZID0gJy0tcGVwLWxpbmUtaGVpZ2h0LTJ4bCc7XG5cbiAgICAvLyBTaGFkb3dzIG9mZnNldCB2YXJpYWJsZXMga2V5c1xuICAgIHN0YXRpYyBTSEFET1dfTk9ORV9PRkZTRVRfS0VZID0gJy0tcGVwLXNoYWRvdy1ub25lLW9mZnNldCc7XG4gICAgc3RhdGljIFNIQURPV19YU19PRkZTRVRfS0VZID0gJy0tcGVwLXNoYWRvdy14cy1vZmZzZXQnO1xuICAgIHN0YXRpYyBTSEFET1dfU01fT0ZGU0VUX0tFWSA9ICctLXBlcC1zaGFkb3ctc20tb2Zmc2V0JztcbiAgICBzdGF0aWMgU0hBRE9XX01EX09GRlNFVF9LRVkgPSAnLS1wZXAtc2hhZG93LW1kLW9mZnNldCc7XG4gICAgc3RhdGljIFNIQURPV19MR19PRkZTRVRfS0VZID0gJy0tcGVwLXNoYWRvdy1sZy1vZmZzZXQnO1xuICAgIHN0YXRpYyBTSEFET1dfWExfT0ZGU0VUX0tFWSA9ICctLXBlcC1zaGFkb3cteGwtb2Zmc2V0JztcblxuICAgIC8vIFNwYWNpbmcgdmFyaWFibGVzIGtleXNcbiAgICBzdGF0aWMgU1BBQ0lOR19TSVpFXzJYU19LRVkgPSAnLS1wZXAtc3BhY2luZy0yeHMnO1xuICAgIHN0YXRpYyBTUEFDSU5HX1NJWkVfWFNfS0VZID0gJy0tcGVwLXNwYWNpbmcteHMnO1xuICAgIHN0YXRpYyBTUEFDSU5HX1NJWkVfU01fS0VZID0gJy0tcGVwLXNwYWNpbmctc20nO1xuICAgIHN0YXRpYyBTUEFDSU5HX1NJWkVfTURfS0VZID0gJy0tcGVwLXNwYWNpbmctbWQnO1xuICAgIHN0YXRpYyBTUEFDSU5HX1NJWkVfTEdfS0VZID0gJy0tcGVwLXNwYWNpbmctbGcnO1xuICAgIHN0YXRpYyBTUEFDSU5HX1NJWkVfWExfS0VZID0gJy0tcGVwLXNwYWNpbmcteGwnO1xuICAgIHN0YXRpYyBTUEFDSU5HX1NJWkVfMlhMX0tFWSA9ICctLXBlcC1zcGFjaW5nLTJ4bCc7XG4gICAgc3RhdGljIFNQQUNJTkdfU0laRV8zWExfS0VZID0gJy0tcGVwLXNwYWNpbmctM3hsJztcbiAgICBzdGF0aWMgU1BBQ0lOR19TSVpFXzRYTF9LRVkgPSAnLS1wZXAtc3BhY2luZy00eGwnO1xuICAgIHN0YXRpYyBTUEFDSU5HX1NJWkVfNVhMX0tFWSA9ICctLXBlcC1zcGFjaW5nLTV4bCc7XG4gICAgc3RhdGljIFNQQUNJTkdfU0laRV82WExfS0VZID0gJy0tcGVwLXNwYWNpbmctNnhsJztcbiAgICBzdGF0aWMgU1BBQ0lOR19TSVpFXzdYTF9LRVkgPSAnLS1wZXAtc3BhY2luZy03eGwnO1xuICAgIHN0YXRpYyBTUEFDSU5HX1NJWkVfOFhMX0tFWSA9ICctLXBlcC1zcGFjaW5nLTh4bCc7XG4gICAgc3RhdGljIFNQQUNJTkdfU0laRV85WExfS0VZID0gJy0tcGVwLXNwYWNpbmctOXhsJztcblxuICAgIC8vIEZvcm0gdmFyaWFibGVzIGtleXNcbiAgICBzdGF0aWMgRk9STV9GSUVMRF9IRUlHSFRfS0VZID0gJy0tcGVwLWZvcm0tZmllbGQtaGVpZ2h0JztcbiAgICBzdGF0aWMgRk9STV9GSUVMRF9USVRMRV9IRUlHSFRfS0VZID0gJy0tcGVwLWZvcm0tZmllbGQtdGl0bGUtaGVpZ2h0JztcbiAgICBzdGF0aWMgRk9STV9GSUVMRF9TUEFDRUlOR19LRVkgPSAnLS1wZXAtZm9ybS1maWVsZC1zcGFjaW5nJztcbiAgICBzdGF0aWMgRk9STV9TUEFDRUlOR19LRVkgPSAnLS1wZXAtZm9ybS1zcGFjaW5nJztcblxuICAgIC8vIENhcmQgdmFyaWFibGVzIGtleXNcbiAgICBzdGF0aWMgQ0FSRF9GSUVMRF9IRUlHSFRfS0VZID0gJy0tcGVwLWNhcmQtZmllbGQtaGVpZ2h0JztcbiAgICBzdGF0aWMgQ0FSRF9TUEFDRUlOR19LRVkgPSAnLS1wZXAtY2FyZC1zcGFjaW5nJztcbiAgICBzdGF0aWMgQ0FSRF9TSEFET1dfT0ZGU0VUX0tFWSA9ICctLXBlcC1zaGFkb3ctY2FyZC1vZmZzZXQnO1xuICAgIHN0YXRpYyBDQVJEX0JPUkRFUl9SQURJVVNfS0VZID0gJy0tcGVwLWNhcmQtYm9yZGVyLXJhZGl1cyc7XG5cbiAgICAvLyBUYWJsZSB2YXJpYWJsZXMga2V5c1xuICAgIHN0YXRpYyBUQUJMRV9GSUVMRF9IRUlHSFRfS0VZID0gJy0tcGVwLXRhYmxlLWZpZWxkLWhlaWdodCc7XG4gICAgc3RhdGljIFRBQkxFX1NQQUNFSU5HX0tFWSA9ICctLXBlcC10YWJsZS1zcGFjaW5nJztcbiAgICBzdGF0aWMgVEFCTEVfQk9SREVSX1JBRElVU19LRVkgPSAnLS1wZXAtdGFibGUtYm9yZGVyLXJhZGl1cyc7XG5cbiAgICBzdGF0aWMgREVGQVVMVF9IRUFERVJfSEVJR0hUID0gNjQ7IC8vIERlZmF1bHRcblxuICAgIHN0YXRpYyBERUZBVUxUX1NQSU5ORVJfQ09MT1IgPSAnIzc4YWEwMCc7XG4gICAgc3RhdGljIERFRkFVTFRfQlJBTkRJTkdfQ09MT1IgPSAnI2ZmZic7XG5cbiAgICBwdWJsaWMgaGFzQ3VzdG9tSG9tZXBhZ2U6IGJvb2xlYW4gPSBudWxsO1xuICAgIHB1YmxpYyBoYXNDdXN0b21IZWFkZXI6IGJvb2xlYW4gPSBudWxsO1xuICAgIHB1YmxpYyBjdXN0b21IZWFkZXJIZWlnaHQgPSBQZXBDdXN0b21pemF0aW9uU2VydmljZS5ERUZBVUxUX0hFQURFUl9IRUlHSFQ7XG4gICAgcHVibGljIG1haW5Db250SGVpZ2h0ID0gMDtcbiAgICBwdWJsaWMgZm9vdGVySGVpZ2h0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICAgIHB1YmxpYyBzZXR0aW5nc1dpZHRoID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgc2Vzc2lvblNlcnZpY2U6IFBlcFNlc3Npb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGZpbGVTZXJ2aWNlOiBQZXBGaWxlU2VydmljZSxcbiAgICAgICAgcHVibGljIGZiOiBGb3JtQnVpbGRlclxuICAgICkge1xuICAgICAgICB0aGlzLmhpZGVGb290ZXIoKTtcbiAgICAgICAgLy9cbiAgICB9XG5cbiAgICBnZXREZWZhdWx0RnJvbUdyb3VwKGZpZWxkOiBQZXBGaWVsZEJhc2UsIHdpdGhWYWxpZGF0b3JzID0gdHJ1ZSk6IEZvcm1Hcm91cCB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRvcnMgPSB3aXRoVmFsaWRhdG9ycyA/IGZpZWxkLmdldFZhbGlkYXRvcnMoKSA6IFtdO1xuICAgICAgICBjb25zdCBncm91cCA9IHt9O1xuICAgICAgICBncm91cFtmaWVsZC5rZXldID0gW1xuICAgICAgICAgICAgeyB2YWx1ZTogZmllbGQudmFsdWUsIGRpc2FibGVkOiBmaWVsZC5kaXNhYmxlZCB9LFxuICAgICAgICAgICAgdmFsaWRhdG9ycyxcbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoZ3JvdXApO1xuICAgIH1cblxuICAgIGdldEZvcm1Db250cm9sKFxuICAgICAgICBmb3JtOiBGb3JtR3JvdXAsXG4gICAgICAgIGZpZWxkS2V5OiBzdHJpbmcsXG4gICAgICAgIHBhcmVudEZpZWxkS2V5OiBzdHJpbmcgPSBudWxsXG4gICAgKTogYW55IHtcbiAgICAgICAgbGV0IGZvcm1Db250cm9sID0gbnVsbDtcblxuICAgICAgICBpZiAoZm9ybSAmJiBmb3JtLmNvbnRyb2xzKSB7XG4gICAgICAgICAgICBpZiAocGFyZW50RmllbGRLZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbCA9IGZvcm0uY29udHJvbHNbZmllbGRLZXldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbCA9IGZvcm0uY29udHJvbHNbcGFyZW50RmllbGRLZXldPy5nZXQoZmllbGRLZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZvcm1Db250cm9sO1xuICAgIH1cblxuICAgIHVwZGF0ZUZvcm1GaWVsZFZhbHVlKFxuICAgICAgICBmb3JtOiBGb3JtR3JvdXAsXG4gICAgICAgIGZpZWxkS2V5OiBzdHJpbmcsXG4gICAgICAgIHZhbHVlID0gJycsXG4gICAgICAgIHBhcmVudEZpZWxkS2V5OiBzdHJpbmcgPSBudWxsXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZvcm1Db250cm9sID0gdGhpcy5nZXRGb3JtQ29udHJvbChmb3JtLCBmaWVsZEtleSwgcGFyZW50RmllbGRLZXkpO1xuICAgICAgICBpZiAoZm9ybUNvbnRyb2wpIHtcbiAgICAgICAgICAgIGZvcm1Db250cm9sLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZUZvcm1GaWVsZChcbiAgICAgICAgZm9ybTogRm9ybUdyb3VwLFxuICAgICAgICBmaWVsZDogUGVwRmllbGRCYXNlLFxuICAgICAgICB2YWx1ZSA9ICcnLFxuICAgICAgICBwYXJlbnRGaWVsZDogUGVwRmllbGRCYXNlID0gbnVsbFxuICAgICk6IHZvaWQge1xuICAgICAgICBjb25zdCBmb3JtQ29udHJvbDogRm9ybUNvbnRyb2wgPSB0aGlzLmdldEZvcm1Db250cm9sKFxuICAgICAgICAgICAgZm9ybSxcbiAgICAgICAgICAgIGZpZWxkLmtleSxcbiAgICAgICAgICAgIHBhcmVudEZpZWxkPy5rZXlcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGZvcm1Db250cm9sKSB7XG4gICAgICAgICAgICBmb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgICAgICAgIC8vIElmIGRpc2FibGVkIGhhcyBjaGFuZ2VkLlxuICAgICAgICAgICAgaWYgKGZvcm1Db250cm9sLmRpc2FibGVkICE9PSBmaWVsZC5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGZpZWxkLmRpc2FibGVkID8gZm9ybUNvbnRyb2wuZGlzYWJsZSgpIDogZm9ybUNvbnRyb2wuZW5hYmxlKCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0b3JzID0gZmllbGQuZ2V0VmFsaWRhdG9ycygpO1xuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sLnNldFZhbGlkYXRvcnModmFsaWRhdG9ycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjYWxjdWxhdGVGb3JtRmllbGRIZWlnaHQoXG4gICAgICAgIHdpdGhUaXRsZSA9IHRydWUsXG4gICAgICAgIHJvd1NwYW4gPSAxLFxuICAgICAgICBzdGFuZEFsb25lID0gZmFsc2VcbiAgICApOiBudW1iZXIge1xuICAgICAgICBjb25zdCB0aGVtZVZhcnMgPSB0aGlzLmdldFRoZW1lVmFyaWFibGVzKCk7XG4gICAgICAgIGNvbnN0IHJvd0ZpZWxkSGVpZ2h0ID0gdGhpcy5nZXROdW1iZXJUaGVtZVZhcmlhYmxlKFxuICAgICAgICAgICAgdGhlbWVWYXJzLFxuICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9STV9GSUVMRF9IRUlHSFRfS0VZXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHJvd0ZpZWxkVGl0bGVIZWlnaHQgPSB0aGlzLmdldE51bWJlclRoZW1lVmFyaWFibGUoXG4gICAgICAgICAgICB0aGVtZVZhcnMsXG4gICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT1JNX0ZJRUxEX1RJVExFX0hFSUdIVF9LRVlcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgcm93RmllbGRTcGFjaW5nQm90dG9tID0gdGhpcy5nZXROdW1iZXJUaGVtZVZhcmlhYmxlKFxuICAgICAgICAgICAgdGhlbWVWYXJzLFxuICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9STV9TUEFDRUlOR19LRVlcbiAgICAgICAgKTtcblxuICAgICAgICBsZXQgZmllbGRIZWlnaHQgPSAwO1xuICAgICAgICBpZiAocm93U3BhbiA9PT0gMSkge1xuICAgICAgICAgICAgZmllbGRIZWlnaHQgPVxuICAgICAgICAgICAgICAgICh3aXRoVGl0bGUgPyByb3dGaWVsZFRpdGxlSGVpZ2h0IDogMCkgKyByb3dGaWVsZEhlaWdodDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd1NwYW5DYWxjID0gd2l0aFRpdGxlID8gcm93U3BhbiA6IHJvd1NwYW4gLSAxO1xuICAgICAgICAgICAgZmllbGRIZWlnaHQgPVxuICAgICAgICAgICAgICAgIHJvd1NwYW4gKiByb3dGaWVsZEhlaWdodCArXG4gICAgICAgICAgICAgICAgcm93U3BhbkNhbGMgKiByb3dGaWVsZFRpdGxlSGVpZ2h0ICtcbiAgICAgICAgICAgICAgICAoc3RhbmRBbG9uZSA/IDAgOiByb3dTcGFuQ2FsYyAqIHJvd0ZpZWxkU3BhY2luZ0JvdHRvbSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmllbGRIZWlnaHQ7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlQ2FyZFJvd3NIZWlnaHQocm93c0NvdW50ID0gMSwgd2l0aFNwYWNpbmcgPSB0cnVlKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgdGhlbWVWYXJzID0gdGhpcy5nZXRUaGVtZVZhcmlhYmxlcygpO1xuICAgICAgICBjb25zdCBjYXJkRmllbGRIZWlnaHQgPSB0aGlzLmdldE51bWJlclRoZW1lVmFyaWFibGUoXG4gICAgICAgICAgICB0aGVtZVZhcnMsXG4gICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5DQVJEX0ZJRUxEX0hFSUdIVF9LRVlcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY2FyZEZpZWxkU3BhY2luZyA9IHRoaXMuZ2V0TnVtYmVyVGhlbWVWYXJpYWJsZShcbiAgICAgICAgICAgIHRoZW1lVmFycyxcbiAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNBUkRfU1BBQ0VJTkdfS0VZXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgZmllbGRIZWlnaHQgPVxuICAgICAgICAgICAgcm93c0NvdW50ICogY2FyZEZpZWxkSGVpZ2h0ICtcbiAgICAgICAgICAgIChyb3dzQ291bnQgLSAxKSAqICh3aXRoU3BhY2luZyA/IGNhcmRGaWVsZFNwYWNpbmcgOiAwKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkSGVpZ2h0O1xuICAgIH1cblxuICAgIGNhbGN1bGF0ZVRhYmxlUm93c0hlaWdodChyb3dzQ291bnQgPSAxLCB3aXRoU3BhY2luZyA9IHRydWUpOiBudW1iZXIge1xuICAgICAgICBjb25zdCB0aGVtZVZhcnMgPSB0aGlzLmdldFRoZW1lVmFyaWFibGVzKCk7XG4gICAgICAgIGNvbnN0IHRhYmxlRmllbGRIZWlnaHQgPSB0aGlzLmdldE51bWJlclRoZW1lVmFyaWFibGUoXG4gICAgICAgICAgICB0aGVtZVZhcnMsXG4gICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5UQUJMRV9GSUVMRF9IRUlHSFRfS0VZXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHRhYmxlRmllbGRTcGFjaW5nID0gdGhpcy5nZXROdW1iZXJUaGVtZVZhcmlhYmxlKFxuICAgICAgICAgICAgdGhlbWVWYXJzLFxuICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuVEFCTEVfU1BBQ0VJTkdfS0VZXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgZmllbGRIZWlnaHQgPVxuICAgICAgICAgICAgcm93c0NvdW50ICpcbiAgICAgICAgICAgICh0YWJsZUZpZWxkSGVpZ2h0ICsgKHdpdGhTcGFjaW5nID8gdGFibGVGaWVsZFNwYWNpbmcgKiAyIDogMCkpO1xuICAgICAgICByZXR1cm4gZmllbGRIZWlnaHQ7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlRmllbGRIZWlnaHQobGF5b3V0VHlwZSA9ICdmb3JtJywgcm93U3Bhbiwgc3RhbmRBbG9uZSk6IHN0cmluZyB7XG4gICAgICAgIGxldCBmaWVsZEhlaWdodCA9ICdpbmhlcml0JzsgLy8gRGVmYXVsdCBmb3IgY2FyZCAod2l0aCBubyB0aXRsZSlcbiAgICAgICAgaWYgKGxheW91dFR5cGUgPT09ICd0YWJsZScpIHtcbiAgICAgICAgICAgIGZpZWxkSGVpZ2h0ID0gdGhpcy5nZXRUaGVtZVZhcmlhYmxlKFxuICAgICAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlRBQkxFX0ZJRUxEX0hFSUdIVF9LRVlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAobGF5b3V0VHlwZSA9PT0gJ2NhcmQnKSB7XG4gICAgICAgICAgICBmaWVsZEhlaWdodCA9XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVDYXJkUm93c0hlaWdodChyb3dTcGFuLCAhc3RhbmRBbG9uZSkgK1xuICAgICAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBGb3JtXG4gICAgICAgICAgICBmaWVsZEhlaWdodCA9XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVGb3JtRmllbGRIZWlnaHQoZmFsc2UsIHJvd1NwYW4sIHN0YW5kQWxvbmUpICtcbiAgICAgICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkSGVpZ2h0O1xuICAgIH1cblxuICAgIGdldEJyYW5kaW5nVGhlbWUoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgdGhlbWVPYmogPSB0aGlzLnNlc3Npb25TZXJ2aWNlLmdldE9iamVjdChcbiAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlVTRVJfVEhFTUVcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuICh0aGVtZU9iaiAmJiB0aGVtZU9iai5UaGVtZSkgfHwgJ2RlZmF1bHQtdGhlbWUnOyAvLyAnbGlnaHQtdGhlbWUnO1xuICAgIH1cblxuICAgIGdldERlZmF1bHRUaGVtZUxheW91dFZhcmlhYmxlcyh0aGVtZVZhcnM6IGFueSk6IHZvaWQge1xuICAgICAgICAvLyBEZWNsYXJlIGRlZmF1bHQgc2NyZWVuIHNpemVzLlxuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLXNjcmVlbi1tYXgtc2l6ZS0yeHMnXSA9XG4gICAgICAgICAgICAnNDYwJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlBYX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1zY3JlZW4tbWF4LXNpemUteHMnXSA9XG4gICAgICAgICAgICAnNzY3JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlBYX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1zY3JlZW4tbWF4LXNpemUtc20nXSA9XG4gICAgICAgICAgICAnOTkxJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlBYX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1zY3JlZW4tbWF4LXNpemUtbWQnXSA9XG4gICAgICAgICAgICAnMTE5OScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5QWF9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtc2NyZWVuLW1heC1zaXplLWxnJ10gPVxuICAgICAgICAgICAgJzEzNjYnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUFhfU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLXNjcmVlbi1tYXgtc2l6ZS14bCddID1cbiAgICAgICAgICAgICcxOTIwJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlBYX1NUUklORztcblxuICAgICAgICAvLyBEZWNsYXJlIGRlZmF1bHQgdG9wIGJhci5cbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNJREVfQkFSX1dJRFRIX0tFWV0gPVxuICAgICAgICAgICAgJzE2JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG5cbiAgICAgICAgLy8gRGVjbGFyZSBkZWZhdWx0IHRvcCBiYXIuXG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5UT1BfQkFSX1NQQUNJTkdfVE9QX0tFWV0gPVxuICAgICAgICAgICAgJzEuNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuVE9QX0JBUl9TUEFDSU5HX0JPVFRPTV9LRVldID1cbiAgICAgICAgICAgICcwLjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlRPUF9CQVJfRklFTERfSEVJR0hUX0tFWV0gPVxuICAgICAgICAgICAgJzIuNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuXG4gICAgICAgIC8vIERlY2xhcmUgZGVmYXVsdCBmb290ZXIuXG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT09URVJfQkFSX1NQQUNJTkdfVE9QX0tFWV0gPVxuICAgICAgICAgICAgJzAuNzUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPT1RFUl9CQVJfU1BBQ0lOR19CT1RUT01fS0VZXSA9XG4gICAgICAgICAgICAnMS4yNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgIH1cblxuICAgIGdldERlZmF1bHRUaGVtZUJvcmRlclJhZGl1c1ZhcmlhYmxlcyh0aGVtZVZhcnM6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQk9SREVSX1JBRElVU19TTV9LRVldID1cbiAgICAgICAgICAgICcwLjEyNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQk9SREVSX1JBRElVU19NRF9LRVldID1cbiAgICAgICAgICAgICcwLjI1JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5CT1JERVJfUkFESVVTX0xHX0tFWV0gPVxuICAgICAgICAgICAgJzAuNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQk9SREVSX1JBRElVU19YTF9LRVldID1cbiAgICAgICAgICAgICcxJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFRoZW1lU3BhY2luZ1ZhcmlhYmxlcyh0aGVtZVZhcnM6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU1BBQ0lOR19TSVpFXzJYU19LRVldID1cbiAgICAgICAgICAgICcwLjEyNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU1BBQ0lOR19TSVpFX1hTX0tFWV0gPVxuICAgICAgICAgICAgJzAuMjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNQQUNJTkdfU0laRV9TTV9LRVldID1cbiAgICAgICAgICAgICcwLjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNQQUNJTkdfU0laRV9NRF9LRVldID1cbiAgICAgICAgICAgICcwLjc1JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5TUEFDSU5HX1NJWkVfTEdfS0VZXSA9XG4gICAgICAgICAgICAnMScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU1BBQ0lOR19TSVpFX1hMX0tFWV0gPVxuICAgICAgICAgICAgJzEuNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU1BBQ0lOR19TSVpFXzJYTF9LRVldID1cbiAgICAgICAgICAgICcyJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5TUEFDSU5HX1NJWkVfM1hMX0tFWV0gPVxuICAgICAgICAgICAgJzIuNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU1BBQ0lOR19TSVpFXzRYTF9LRVldID1cbiAgICAgICAgICAgICczJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5TUEFDSU5HX1NJWkVfNVhMX0tFWV0gPVxuICAgICAgICAgICAgJzMuNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU1BBQ0lOR19TSVpFXzZYTF9LRVldID1cbiAgICAgICAgICAgICc1JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5TUEFDSU5HX1NJWkVfN1hMX0tFWV0gPVxuICAgICAgICAgICAgJzYnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNQQUNJTkdfU0laRV84WExfS0VZXSA9XG4gICAgICAgICAgICAnOCcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU1BBQ0lOR19TSVpFXzlYTF9LRVldID1cbiAgICAgICAgICAgICcxNicgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgIH1cblxuICAgIGdldERlZmF1bHRUaGVtZUZvbnRzVmFyaWFibGVzKHRoZW1lVmFyczogYW55KTogdm9pZCB7XG4gICAgICAgIC8vIFRpdGxlIGZvbnQgZmFtaWx5XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT05UX0ZBTUlMWV9USVRMRV9LRVldID0gJ05leGEnO1xuXG4gICAgICAgIC8vIEJvZHkgZm9udCBmYW1pbHlcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPTlRfRkFNSUxZX0JPRFlfS0VZXSA9ICdJbnRlcic7XG5cbiAgICAgICAgLy8gRm9udCBzaXplc1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9OVF9TSVpFXzJYU19LRVldID1cbiAgICAgICAgICAgICcwLjYyNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9OVF9TSVpFX1hTX0tFWV0gPVxuICAgICAgICAgICAgJzAuNzUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPTlRfU0laRV9TTV9LRVldID1cbiAgICAgICAgICAgICcwLjg3NScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9OVF9TSVpFX01EX0tFWV0gPVxuICAgICAgICAgICAgJzEnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPTlRfU0laRV9MR19LRVldID1cbiAgICAgICAgICAgICcxLjEyNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9OVF9TSVpFX1hMX0tFWV0gPVxuICAgICAgICAgICAgJzEuMjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPTlRfU0laRV8yWExfS0VZXSA9XG4gICAgICAgICAgICAnMS41JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG5cbiAgICAgICAgLy8gTGluZSBoZWlnaHRcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkxJTkVfSEVJR0hUXzJYU19LRVldID1cbiAgICAgICAgICAgICcwLjc1JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5MSU5FX0hFSUdIVF9YU19LRVldID1cbiAgICAgICAgICAgICcxJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5MSU5FX0hFSUdIVF9TTV9LRVldID1cbiAgICAgICAgICAgICcxLjI1JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5MSU5FX0hFSUdIVF9NRF9LRVldID1cbiAgICAgICAgICAgICcxLjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkxJTkVfSEVJR0hUX0xHX0tFWV0gPVxuICAgICAgICAgICAgJzEuNzUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkxJTkVfSEVJR0hUX1hMX0tFWV0gPVxuICAgICAgICAgICAgJzInICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkxJTkVfSEVJR0hUXzJYTF9LRVldID1cbiAgICAgICAgICAgICcyLjI1JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG5cbiAgICAgICAgLy8gRm9udCB3ZWlnaHRcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1mb250LXdlaWdodC1ub3JtYWwnXSA9IDQwMDtcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1mb250LXdlaWdodC1ib2xkJ10gPSA2MDA7XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtZm9udC13ZWlnaHQtYm9sZGVyJ10gPSA4MDA7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFRoZW1lQnV0dG9uc1ZhcmlhYmxlcyh0aGVtZVZhcnM6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi0yeHMtaG9yaXpvbnRhbC1zcGFjaW5nJ10gPVxuICAgICAgICAgICAgJzAuMjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1idXR0b24tMnhzLW1pbi13aWR0aCddID1cbiAgICAgICAgICAgICcxJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLTJ4cy1oZWlnaHQnXSA9XG4gICAgICAgICAgICAnMScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi0yeHMtZm9udC1zaXplJ10gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9OVF9TSVpFXzJYU19LRVkgKyAnKSc7XG4gICAgICAgIC8vIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLTJ4cy1pY29uLWhvcml6b250YWwtc3BhY2luZyddID0gJzAuMTI1JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG5cbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1idXR0b24teHMtaG9yaXpvbnRhbC1zcGFjaW5nJ10gPVxuICAgICAgICAgICAgJzAuNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi14cy1taW4td2lkdGgnXSA9XG4gICAgICAgICAgICAnMS41JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLXhzLWhlaWdodCddID1cbiAgICAgICAgICAgICcxLjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1idXR0b24teHMtZm9udC1zaXplJ10gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9OVF9TSVpFX1hTX0tFWSArICcpJztcbiAgICAgICAgLy8gdGhlbWVWYXJzWyctLXBlcC1idXR0b24teHMtaWNvbi1ob3Jpem9udGFsLXNwYWNpbmcnXSA9ICcwLjI1JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG5cbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1idXR0b24tc20taG9yaXpvbnRhbC1zcGFjaW5nJ10gPVxuICAgICAgICAgICAgJzAuNzUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1idXR0b24tc20tbWluLXdpZHRoJ10gPVxuICAgICAgICAgICAgJzInICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1idXR0b24tc20taGVpZ2h0J10gPVxuICAgICAgICAgICAgJzInICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1idXR0b24tc20tZm9udC1zaXplJ10gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9OVF9TSVpFX1NNX0tFWSArICcpJztcbiAgICAgICAgLy8gdGhlbWVWYXJzWyctLXBlcC1idXR0b24tc20taWNvbi1ob3Jpem9udGFsLXNwYWNpbmcnXSA9ICcwLjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcblxuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi1tZC1ob3Jpem9udGFsLXNwYWNpbmcnXSA9XG4gICAgICAgICAgICAnMScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi1tZC1taW4td2lkdGgnXSA9XG4gICAgICAgICAgICAnMi41JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLW1kLWhlaWdodCddID1cbiAgICAgICAgICAgICcyLjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1idXR0b24tbWQtZm9udC1zaXplJ10gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9OVF9TSVpFX01EX0tFWSArICcpJztcbiAgICAgICAgLy8gdGhlbWVWYXJzWyctLXBlcC1idXR0b24tbWQtaWNvbi1ob3Jpem9udGFsLXNwYWNpbmcnXSA9ICcwLjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcblxuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi1sZy1ob3Jpem9udGFsLXNwYWNpbmcnXSA9XG4gICAgICAgICAgICAnMScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi1sZy1taW4td2lkdGgnXSA9XG4gICAgICAgICAgICAnMycgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi1sZy1oZWlnaHQnXSA9XG4gICAgICAgICAgICAnMycgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi1sZy1mb250LXNpemUnXSA9XG4gICAgICAgICAgICAndmFyKCcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT05UX1NJWkVfTEdfS0VZICsgJyknO1xuICAgICAgICAvLyB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi1sZy1pY29uLWhvcml6b250YWwtc3BhY2luZyddID0gJzAuNzUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcblxuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi14bC1ob3Jpem9udGFsLXNwYWNpbmcnXSA9XG4gICAgICAgICAgICAnMS41JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLXhsLW1pbi13aWR0aCddID1cbiAgICAgICAgICAgICc0JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLXhsLWhlaWdodCddID1cbiAgICAgICAgICAgICc0JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLXhsLWZvbnQtc2l6ZSddID1cbiAgICAgICAgICAgICd2YXIoJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPTlRfU0laRV9YTF9LRVkgKyAnKSc7XG4gICAgICAgIC8vIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLXhsLWljb24taG9yaXpvbnRhbC1zcGFjaW5nJ10gPSAnMScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgIH1cblxuICAgIGdldFN5c3RlbVByaW1hcnlJbnZlcnRDb2xvcnNWYXJpYWJsZXModGhlbWVWYXJzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhlbWVWYXJzW1xuICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfU1lTVEVNX1BSSU1BUllfSU5WRVJUX0tFWSArICctaCdcbiAgICAgICAgXSA9ICcyNTUnO1xuICAgICAgICB0aGVtZVZhcnNbXG4gICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9TWVNURU1fUFJJTUFSWV9JTlZFUlRfS0VZICsgJy1zJ1xuICAgICAgICBdID0gJzEwMCUnO1xuICAgICAgICB0aGVtZVZhcnNbXG4gICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9TWVNURU1fUFJJTUFSWV9JTlZFUlRfS0VZICsgJy1sJ1xuICAgICAgICBdID0gJzEwMCUnO1xuICAgIH1cblxuICAgIGdldFN5c3RlbVByaW1hcnlDb2xvcnNWYXJpYWJsZXModGhlbWVWYXJzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1NZU1RFTV9QUklNQVJZX0tFWSArICctaCddID1cbiAgICAgICAgICAgICcwJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1NZU1RFTV9QUklNQVJZX0tFWSArICctcyddID1cbiAgICAgICAgICAgICcwJSc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9TWVNURU1fUFJJTUFSWV9LRVkgKyAnLWwnXSA9XG4gICAgICAgICAgICAnMTAlJztcbiAgICB9XG5cbiAgICBnZXRTeXN0ZW1TdWNjZXNzQ29sb3JzVmFyaWFibGVzKHRoZW1lVmFyczogYW55KTogdm9pZCB7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9TWVNURU1fU1VDQ0VTU19LRVkgKyAnLWgnXSA9XG4gICAgICAgICAgICAnMTAwJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1NZU1RFTV9TVUNDRVNTX0tFWSArICctcyddID1cbiAgICAgICAgICAgICcxMDAlJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1NZU1RFTV9TVUNDRVNTX0tFWSArICctbCddID1cbiAgICAgICAgICAgICcyNSUnO1xuICAgIH1cblxuICAgIGdldFN5c3RlbUNhdXRpb25Db2xvcnNWYXJpYWJsZXModGhlbWVWYXJzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1NZU1RFTV9DQVVUSU9OX0tFWSArICctaCddID1cbiAgICAgICAgICAgICczNjAnO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfU1lTVEVNX0NBVVRJT05fS0VZICsgJy1zJ10gPVxuICAgICAgICAgICAgJzEwMCUnO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfU1lTVEVNX0NBVVRJT05fS0VZICsgJy1sJ10gPVxuICAgICAgICAgICAgJzQwJSc7XG4gICAgfVxuXG4gICAgZ2V0VXNlclByaW1hcnlDb2xvcnNWYXJpYWJsZXModGhlbWVWYXJzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1VTRVJfUFJJTUFSWV9LRVkgKyAnLWgnXSA9ICc3OCc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9VU0VSX1BSSU1BUllfS0VZICsgJy1zJ10gPVxuICAgICAgICAgICAgJzg3JSc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9VU0VSX1BSSU1BUllfS0VZICsgJy1sJ10gPVxuICAgICAgICAgICAgJzI3JSc7XG4gICAgfVxuXG4gICAgZ2V0VXNlclNlY29uZGFyeUNvbG9yc1ZhcmlhYmxlcyh0aGVtZVZhcnM6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfVVNFUl9TRUNPTkRBUllfS0VZICsgJy1oJ10gPVxuICAgICAgICAgICAgJzM2JztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1VTRVJfU0VDT05EQVJZX0tFWSArICctcyddID1cbiAgICAgICAgICAgICcxMDAlJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1VTRVJfU0VDT05EQVJZX0tFWSArICctbCddID1cbiAgICAgICAgICAgICc1MCUnO1xuICAgIH1cblxuICAgIGdldFdlYWtDb2xvcnNWYXJpYWJsZXModGhlbWVWYXJzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1dFQUtfS0VZICsgJy1oJ10gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfU1lTVEVNX1BSSU1BUllfS0VZICsgJy1oKSc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9XRUFLX0tFWSArICctcyddID1cbiAgICAgICAgICAgICd2YXIoJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1NZU1RFTV9QUklNQVJZX0tFWSArICctcyknO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfV0VBS19LRVkgKyAnLWwnXSA9XG4gICAgICAgICAgICAndmFyKCcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9TWVNURU1fUFJJTUFSWV9LRVkgKyAnLWwpJztcbiAgICB9XG5cbiAgICBnZXRSZWd1bGFyQ29sb3JzVmFyaWFibGVzKHRoZW1lVmFyczogYW55KTogdm9pZCB7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9SRUdVTEFSX0tFWSArICctaCddID1cbiAgICAgICAgICAgICd2YXIoJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1NZU1RFTV9QUklNQVJZX0tFWSArICctaCknO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfUkVHVUxBUl9LRVkgKyAnLXMnXSA9XG4gICAgICAgICAgICAndmFyKCcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9TWVNURU1fUFJJTUFSWV9LRVkgKyAnLXMpJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1JFR1VMQVJfS0VZICsgJy1sJ10gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfU1lTVEVNX1BSSU1BUllfS0VZICsgJy1sKSc7XG4gICAgfVxuXG4gICAgZ2V0U3Ryb25nQ29sb3JzVmFyaWFibGVzKHRoZW1lVmFyczogYW55KTogdm9pZCB7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9TVFJPTkdfS0VZICsgJy1oJ10gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfVVNFUl9QUklNQVJZX0tFWSArICctaCknO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfU1RST05HX0tFWSArICctcyddID1cbiAgICAgICAgICAgICd2YXIoJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1VTRVJfUFJJTUFSWV9LRVkgKyAnLXMpJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1NUUk9OR19LRVkgKyAnLWwnXSA9XG4gICAgICAgICAgICAndmFyKCcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9VU0VSX1BSSU1BUllfS0VZICsgJy1sKSc7XG4gICAgfVxuXG4gICAgZ2V0VGV4dENvbG9yc1ZhcmlhYmxlcyh0aGVtZVZhcnM6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfVEVYVF9MSU5LX0tFWSArICctaCddID0gJzIwNyc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9URVhUX0xJTktfS0VZICsgJy1zJ10gPSAnNzYlJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1RFWFRfTElOS19LRVkgKyAnLWwnXSA9ICczNyUnO1xuICAgIH1cblxuICAgIGdldERlZmF1bHRUaGVtZUNvbG9yc1ZhcmlhYmxlcyh0aGVtZVZhcnM6IGFueSk6IHZvaWQge1xuICAgICAgICAvLyBTeXN0ZW0gcHJpbWFyeSBpbnZlcnQgY29sb3JzLlxuICAgICAgICB0aGlzLmdldFN5c3RlbVByaW1hcnlJbnZlcnRDb2xvcnNWYXJpYWJsZXModGhlbWVWYXJzKTtcbiAgICAgICAgLy8gU3lzdGVtIHByaW1hcnkgY29sb3JzLlxuICAgICAgICB0aGlzLmdldFN5c3RlbVByaW1hcnlDb2xvcnNWYXJpYWJsZXModGhlbWVWYXJzKTtcbiAgICAgICAgLy8gU3lzdGVtIHN1Y2Nlc3MgY29sb3JzLlxuICAgICAgICB0aGlzLmdldFN5c3RlbVN1Y2Nlc3NDb2xvcnNWYXJpYWJsZXModGhlbWVWYXJzKTtcbiAgICAgICAgLy8gU3lzdGVtIGNhdXRpb24gY29sb3JzLlxuICAgICAgICB0aGlzLmdldFN5c3RlbUNhdXRpb25Db2xvcnNWYXJpYWJsZXModGhlbWVWYXJzKTtcbiAgICAgICAgLy8gVXNlciBwcmltYXJ5IGNvbG9ycy5cbiAgICAgICAgdGhpcy5nZXRVc2VyUHJpbWFyeUNvbG9yc1ZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuICAgICAgICAvLyBVc2VyIHNlY29uZGFyeSBjb2xvcnMuXG4gICAgICAgIHRoaXMuZ2V0VXNlclNlY29uZGFyeUNvbG9yc1ZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuXG4gICAgICAgIC8vIFdlYWsgY29sb3JzLlxuICAgICAgICB0aGlzLmdldFdlYWtDb2xvcnNWYXJpYWJsZXModGhlbWVWYXJzKTtcbiAgICAgICAgLy8gUmVndWxhciBjb2xvcnMuXG4gICAgICAgIHRoaXMuZ2V0UmVndWxhckNvbG9yc1ZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuICAgICAgICAvLyBTdHJvbmcgY29sb3JzLlxuICAgICAgICB0aGlzLmdldFN0cm9uZ0NvbG9yc1ZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuXG4gICAgICAgIC8vIFRleHQgY29sb3JzLlxuICAgICAgICB0aGlzLmdldFRleHRDb2xvcnNWYXJpYWJsZXModGhlbWVWYXJzKTtcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0VGhlbWVTaGFkb3dzVmFyaWFibGVzKHRoZW1lVmFyczogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5vbmVPZmZzZXQgPSAnMCc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5TSEFET1dfTk9ORV9PRkZTRVRfS0VZXSA9IG5vbmVPZmZzZXQ7XG5cbiAgICAgICAgY29uc3QgeHNPZmZzZXQgPSAnMCAwLjEyNXJlbSAwLjI1cmVtIDAnO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU0hBRE9XX1hTX09GRlNFVF9LRVldID0geHNPZmZzZXQ7XG5cbiAgICAgICAgY29uc3Qgc21PZmZzZXQgPSAnMCAwLjI1cmVtIDAuNXJlbSAwJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNIQURPV19TTV9PRkZTRVRfS0VZXSA9IHNtT2Zmc2V0O1xuXG4gICAgICAgIGNvbnN0IG1kT2Zmc2V0ID0gJzAgMC41cmVtIDFyZW0gMCc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5TSEFET1dfTURfT0ZGU0VUX0tFWV0gPSBtZE9mZnNldDtcblxuICAgICAgICBjb25zdCBsZ09mZnNldCA9ICcwIDFyZW0gMnJlbSAwJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNIQURPV19MR19PRkZTRVRfS0VZXSA9IGxnT2Zmc2V0O1xuXG4gICAgICAgIGNvbnN0IHhsT2Zmc2V0ID0gJzAgMnJlbSA0cmVtIDAnO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU0hBRE9XX1hMX09GRlNFVF9LRVldID0geGxPZmZzZXQ7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFRoZW1lRm9ybUN1c3RvbWl6YXRpb25WYXJpYWJsZXModGhlbWVWYXJzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZm9ybUZpZWxkU3BhY2luZyA9IDE7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT1JNX0ZJRUxEX0hFSUdIVF9LRVldID1cbiAgICAgICAgICAgICcyLjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPUk1fRklFTERfVElUTEVfSEVJR0hUX0tFWV0gPVxuICAgICAgICAgICAgJzEuNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9STV9TUEFDRUlOR19LRVldID1cbiAgICAgICAgICAgIGZvcm1GaWVsZFNwYWNpbmcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9STV9GSUVMRF9TUEFDRUlOR19LRVldID1cbiAgICAgICAgICAgIGZvcm1GaWVsZFNwYWNpbmcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgIH1cblxuICAgIGdldERlZmF1bHRUaGVtZUNhcmRDdXN0b21pemF0aW9uVmFyaWFibGVzKHRoZW1lVmFyczogYW55KTogdm9pZCB7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DQVJEX0ZJRUxEX0hFSUdIVF9LRVldID1cbiAgICAgICAgICAgICcxLjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNBUkRfU1BBQ0VJTkdfS0VZXSA9XG4gICAgICAgICAgICAndmFyKCcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5TUEFDSU5HX1NJWkVfWFNfS0VZICsgJyknO1xuXG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DQVJEX0JPUkRFUl9SQURJVVNfS0VZXSA9XG4gICAgICAgICAgICAndmFyKCcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5CT1JERVJfUkFESVVTX01EX0tFWSArICcpJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNBUkRfU0hBRE9XX09GRlNFVF9LRVldID1cbiAgICAgICAgICAgICd2YXIoJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNIQURPV19NRF9PRkZTRVRfS0VZICsgJyknO1xuICAgIH1cblxuICAgIGdldERlZmF1bHRUaGVtZVRhYmxlQ3VzdG9taXphdGlvblZhcmlhYmxlcyh0aGVtZVZhcnM6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuVEFCTEVfRklFTERfSEVJR0hUX0tFWV0gPVxuICAgICAgICAgICAgJzInICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlRBQkxFX1NQQUNFSU5HX0tFWV0gPVxuICAgICAgICAgICAgJzAuNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuVEFCTEVfQk9SREVSX1JBRElVU19LRVldID1cbiAgICAgICAgICAgICd2YXIoJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkJPUkRFUl9SQURJVVNfTURfS0VZICsgJyknO1xuICAgIH1cblxuICAgIGdldERlZmF1bHRUaGVtZVFTQ3VzdG9taXphdGlvblZhcmlhYmxlcyh0aGVtZVZhcnM6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBxc1N0YXRlOiBQZXBTdHlsZVR5cGUgPSAncmVndWxhcic7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5TVFlMRV9RU19LRVldID0gcXNTdGF0ZTtcblxuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfUVNfS0VZICsgJy1oJ10gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfU1lTVEVNX1BSSU1BUllfS0VZICsgJy1oKSc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9RU19LRVkgKyAnLXMnXSA9XG4gICAgICAgICAgICAndmFyKCcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9TWVNURU1fUFJJTUFSWV9LRVkgKyAnLXMpJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1FTX0tFWSArICctbCddID1cbiAgICAgICAgICAgICd2YXIoJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1NZU1RFTV9QUklNQVJZX0tFWSArICctbCknO1xuICAgIH1cblxuICAgIGdldERlZmF1bHRUaGVtZVRvcEhlYWRlckN1c3RvbWl6YXRpb25WYXJpYWJsZXModGhlbWVWYXJzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdG9wSGVhZGVyU3RhdGU6IFBlcFN0eWxlVHlwZSA9ICdzdHJvbmcnO1xuICAgICAgICB0aGVtZVZhcnNbXG4gICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5TVFlMRV9UT1BfSEVBREVSX0tFWVxuICAgICAgICBdID0gdG9wSGVhZGVyU3RhdGU7XG5cbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1RPUF9IRUFERVJfS0VZICsgJy1oJ10gPSAnJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1RPUF9IRUFERVJfS0VZICsgJy1zJ10gPSAnJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1RPUF9IRUFERVJfS0VZICsgJy1sJ10gPSAnJztcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0VGhlbWVWYXJpYWJsZXMoKTogYW55IHtcbiAgICAgICAgY29uc3QgdGhlbWVWYXJzID0ge307XG5cbiAgICAgICAgLy8gRGVjbGFyZSBkZWZhdWx0IGxheW91dC5cbiAgICAgICAgdGhpcy5nZXREZWZhdWx0VGhlbWVMYXlvdXRWYXJpYWJsZXModGhlbWVWYXJzKTtcblxuICAgICAgICAvLyBEZWNsYXJlIGRlZmF1bHQgYm9yZGVyIHJhZGl1cy5cbiAgICAgICAgdGhpcy5nZXREZWZhdWx0VGhlbWVCb3JkZXJSYWRpdXNWYXJpYWJsZXModGhlbWVWYXJzKTtcblxuICAgICAgICAvLyBEZWNsYXJlIGRlZmF1bHQgc3BhY2luZy5cbiAgICAgICAgdGhpcy5nZXREZWZhdWx0VGhlbWVTcGFjaW5nVmFyaWFibGVzKHRoZW1lVmFycyk7XG5cbiAgICAgICAgLy8gRGVjbGFyZSBkZWZhdWx0IGZvbnRzIHNpemUgJiBsaW5lIGhlaWdodC5cbiAgICAgICAgdGhpcy5nZXREZWZhdWx0VGhlbWVGb250c1ZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuXG4gICAgICAgIC8vIERlY2xhcmUgZGVmYXVsdCBidXR0b25zLlxuICAgICAgICB0aGlzLmdldERlZmF1bHRUaGVtZUJ1dHRvbnNWYXJpYWJsZXModGhlbWVWYXJzKTtcblxuICAgICAgICAvLyBEZWNsYXJlIGRlZmF1bHQgY29sb3JzLlxuICAgICAgICB0aGlzLmdldERlZmF1bHRUaGVtZUNvbG9yc1ZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuXG4gICAgICAgIC8vIERlY2xhcmUgZGVmYXVsdCBzaGFkb3dzLlxuICAgICAgICB0aGlzLmdldERlZmF1bHRUaGVtZVNoYWRvd3NWYXJpYWJsZXModGhlbWVWYXJzKTtcblxuICAgICAgICAvLyBEZWNsYXJlIGRlZmF1bHQgZm9ybSBjdXN0b21pemF0aW9uLlxuICAgICAgICB0aGlzLmdldERlZmF1bHRUaGVtZUZvcm1DdXN0b21pemF0aW9uVmFyaWFibGVzKHRoZW1lVmFycyk7XG5cbiAgICAgICAgLy8gRGVjbGFyZSBkZWZhdWx0IGNhcmQgY3VzdG9taXphdGlvbi5cbiAgICAgICAgdGhpcy5nZXREZWZhdWx0VGhlbWVDYXJkQ3VzdG9taXphdGlvblZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuXG4gICAgICAgIC8vIERlY2xhcmUgZGVmYXVsdCB0YWJsZSBjdXN0b21pemF0aW9uLlxuICAgICAgICB0aGlzLmdldERlZmF1bHRUaGVtZVRhYmxlQ3VzdG9taXphdGlvblZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuXG4gICAgICAgIC8vIERlY2xhcmUgZGVmYXVsdCBxcyBjdXN0b21pemF0aW9uLlxuICAgICAgICB0aGlzLmdldERlZmF1bHRUaGVtZVFTQ3VzdG9taXphdGlvblZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuXG4gICAgICAgIC8vIERlY2xhcmUgZGVmYXVsdCB0b3AgaGVhZGVyIGN1c3RvbWl6YXRpb24uXG4gICAgICAgIHRoaXMuZ2V0RGVmYXVsdFRoZW1lVG9wSGVhZGVyQ3VzdG9taXphdGlvblZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuXG4gICAgICAgIHJldHVybiB0aGVtZVZhcnM7XG4gICAgfVxuXG4gICAgZ2V0VGhlbWVWYXJpYWJsZXMoKTogYW55IHtcbiAgICAgICAgY29uc3QgcmV0ID0gdGhpcy5nZXREZWZhdWx0VGhlbWVWYXJpYWJsZXMoKTtcbiAgICAgICAgY29uc3QgdGhlbWVWYXJzID0gdGhpcy5zZXNzaW9uU2VydmljZS5nZXRPYmplY3QoXG4gICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5VU0VSX1RIRU1FX1ZBUklBQkxFU1xuICAgICAgICApO1xuXG4gICAgICAgIC8vIE92ZXJyaWRlIGRlZmF1bHRzLlxuICAgICAgICBpZiAodGhlbWVWYXJzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGVtZVZhcnMpIHtcbiAgICAgICAgICAgICAgICByZXRba2V5XSA9IHRoZW1lVmFyc1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICBzZXRUaGVtZVZhcmlhYmxlcyh0aGVtZVZhcmlhYmxlc1RvU2V0ID0gbnVsbCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0aGVtZVZhcmlhYmxlcyA9IHRoaXMuZ2V0VGhlbWVWYXJpYWJsZXMoKTtcblxuICAgICAgICAvLyBPdmVycmlkZSBkZWZhdWx0cy5cbiAgICAgICAgaWYgKHRoZW1lVmFyaWFibGVzVG9TZXQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoZW1lVmFyaWFibGVzVG9TZXQpIHtcbiAgICAgICAgICAgICAgICB0aGVtZVZhcmlhYmxlc1trZXldID0gdGhlbWVWYXJpYWJsZXNUb1NldFtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXNzaW9uU2VydmljZS5zZXRPYmplY3QoXG4gICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5VU0VSX1RIRU1FX1ZBUklBQkxFUyxcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoZW1lVmFyaWFibGVzKVxuICAgICAgICApO1xuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoZW1lVmFyaWFibGVzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0ZvbnRVcmxLZXkoa2V5KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsZVNlcnZpY2UubG9hZEZvbnRTdHlsZShrZXksIHRoZW1lVmFyaWFibGVzW2tleV0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgdGhlbWVWYXJpYWJsZXNba2V5XVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0ZvbnRVcmxLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IHJlcyA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGtleSA9PT0gUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9OVF9GQU1JTFlfVElUTEVfTk9STUFMX1VSTF9LRVkgfHxcbiAgICAgICAgICAgIGtleSA9PT0gUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9OVF9GQU1JTFlfVElUTEVfQk9MRF9VUkxfS0VZIHx8XG4gICAgICAgICAgICBrZXkgPT09IFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPTlRfRkFNSUxZX0JPRFlfTk9STUFMX1VSTF9LRVkgfHxcbiAgICAgICAgICAgIGtleSA9PT0gUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9OVF9GQU1JTFlfQk9EWV9CT0xEX1VSTF9LRVlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXMgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBnZXRUaGVtZVZhcmlhYmxlKGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgdGhlbWVWYXJzID0gdGhpcy5nZXRUaGVtZVZhcmlhYmxlcygpO1xuXG4gICAgICAgIGlmICh0aGVtZVZhcnMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoZW1lVmFyc1trZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0TnVtYmVyVGhlbWVWYXJpYWJsZSh0aGVtZVZhcnMsIGtleTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoZW1lVmFycyAmJiB0aGVtZVZhcnMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgLy8gSWYgaXQncyByZWZlcmVuY2UgdG8gYW5vdGhlciBrZXkuXG4gICAgICAgICAgICBpZiAodGhlbWVWYXJzW2tleV0uaW5kZXhPZigndmFyKCcpID09PSAwKSB7XG4gICAgICAgICAgICAgICAga2V5ID0gdGhlbWVWYXJzW2tleV0uc3Vic3RyKDQpLnNwbGl0KCcpJylbMF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHRtcCA9IE51bWJlcihcbiAgICAgICAgICAgICAgICB0aGVtZVZhcnNba2V5XS5yZXBsYWNlKFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkcsICcnKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiB0bXA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Rm9vdGVySGVpZ2h0KGhlaWdodCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5mb290ZXJIZWlnaHQuZ2V0VmFsdWUoKSAhPT0gaGVpZ2h0KSB7XG4gICAgICAgICAgICAvLyBpdCBpcyBwdWJsaXNoaW5nIHRoaXMgdmFsdWUgdG8gYWxsIHRoZSBzdWJzY3JpYmVycyB0aGF0IGhhdmUgYWxyZWFkeSBzdWJzY3JpYmVkIHRvIHRoaXMgbWVzc2FnZVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb290ZXJIZWlnaHQubmV4dChoZWlnaHQpO1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9PVEVSX0hFSUdIVF9LRVksXG4gICAgICAgICAgICBoZWlnaHQgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaGlkZUZvb3RlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRGb290ZXJIZWlnaHQoMCk7XG4gICAgfVxuXG4gICAgc2hvd0Zvb3RlcigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGhlbWVWYXJzID0gdGhpcy5nZXRUaGVtZVZhcmlhYmxlcygpO1xuXG4gICAgICAgIGNvbnN0IHJlcyA9XG4gICAgICAgICAgICB0aGlzLmdldE51bWJlclRoZW1lVmFyaWFibGUoXG4gICAgICAgICAgICAgICAgdGhlbWVWYXJzLFxuICAgICAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPT1RFUl9CQVJfU1BBQ0lOR19UT1BfS0VZXG4gICAgICAgICAgICApICtcbiAgICAgICAgICAgIHRoaXMuZ2V0TnVtYmVyVGhlbWVWYXJpYWJsZShcbiAgICAgICAgICAgICAgICB0aGVtZVZhcnMsXG4gICAgICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9PVEVSX0JBUl9TUEFDSU5HX0JPVFRPTV9LRVlcbiAgICAgICAgICAgICkgK1xuICAgICAgICAgICAgdGhpcy5nZXROdW1iZXJUaGVtZVZhcmlhYmxlKFxuICAgICAgICAgICAgICAgIHRoZW1lVmFycyxcbiAgICAgICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5UT1BfQkFSX0ZJRUxEX0hFSUdIVF9LRVlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zZXRGb290ZXJIZWlnaHQocmVzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFNldHRpbmdzV2lkdGgod2lkdGgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3NXaWR0aC5nZXRWYWx1ZSgpICE9PSB3aWR0aCkge1xuICAgICAgICAgICAgLy8gaXQgaXMgcHVibGlzaGluZyB0aGlzIHZhbHVlIHRvIGFsbCB0aGUgc3Vic2NyaWJlcnMgdGhhdCBoYXZlIGFscmVhZHkgc3Vic2NyaWJlZCB0byB0aGlzIG1lc3NhZ2VcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NXaWR0aC5uZXh0KHdpZHRoKTtcbiAgICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNFVFRJTkdTX1dJRFRIX0tFWSxcbiAgICAgICAgICAgIHdpZHRoICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklOR1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGhpZGVTZXR0aW5ncygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRTZXR0aW5nc1dpZHRoKDApO1xuICAgIH1cblxuICAgIHNob3dTZXR0aW5ncygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGhlbWVWYXJzID0gdGhpcy5nZXRUaGVtZVZhcmlhYmxlcygpO1xuXG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuZ2V0TnVtYmVyVGhlbWVWYXJpYWJsZShcbiAgICAgICAgICAgIHRoZW1lVmFycyxcbiAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNJREVfQkFSX1dJRFRIX0tFWVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuc2V0U2V0dGluZ3NXaWR0aChyZXMpO1xuICAgIH1cblxuICAgIGdldFRvcEJhckhlaWdodCgpOiBudW1iZXIge1xuICAgICAgICBjb25zdCB0aGVtZVZhcnMgPSB0aGlzLmdldFRoZW1lVmFyaWFibGVzKCk7XG5cbiAgICAgICAgY29uc3QgcmVzID1cbiAgICAgICAgICAgIHRoaXMuZ2V0TnVtYmVyVGhlbWVWYXJpYWJsZShcbiAgICAgICAgICAgICAgICB0aGVtZVZhcnMsXG4gICAgICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuVE9QX0JBUl9TUEFDSU5HX1RPUF9LRVlcbiAgICAgICAgICAgICkgK1xuICAgICAgICAgICAgdGhpcy5nZXROdW1iZXJUaGVtZVZhcmlhYmxlKFxuICAgICAgICAgICAgICAgIHRoZW1lVmFycyxcbiAgICAgICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5UT1BfQkFSX1NQQUNJTkdfQk9UVE9NX0tFWVxuICAgICAgICAgICAgKSArXG4gICAgICAgICAgICB0aGlzLmdldE51bWJlclRoZW1lVmFyaWFibGUoXG4gICAgICAgICAgICAgICAgdGhlbWVWYXJzLFxuICAgICAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlRPUF9CQVJfRklFTERfSEVJR0hUX0tFWVxuICAgICAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIHNldE9sZFVzZXJUaGVtZShyZXM6IGFueSk6IHZvaWQge1xuICAgICAgICAvLyBBZGRlZCB1c2VyIHRoZW1lLlxuICAgICAgICBjb25zdCB0aGVtZU9iaiA9IHtcbiAgICAgICAgICAgIFRoZW1lOiByZXMuVGhlbWUgfHwgJ2RlZmF1bHQtdGhlbWUnLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuc2Vzc2lvblNlcnZpY2Uuc2V0T2JqZWN0KFxuICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuVVNFUl9USEVNRSxcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoZW1lT2JqKVxuICAgICAgICApO1xuXG4gICAgICAgIGxldCBzcGlubmVyQ29sb3I7XG4gICAgICAgIGxldCBicmFuZGluZ0ZvbnRDb2xvcjtcblxuICAgICAgICBpZiAodGhpcy5pc0xpZ2h0Q29sb3IocmVzLkJyYW5kaW5nTWFpbkNvbG9yKSkge1xuICAgICAgICAgICAgc3Bpbm5lckNvbG9yID0gUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuREVGQVVMVF9TUElOTkVSX0NPTE9SO1xuICAgICAgICAgICAgYnJhbmRpbmdGb250Q29sb3IgPSAnIzIyMic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzcGlubmVyQ29sb3IgPSByZXMuQnJhbmRpbmdNYWluQ29sb3I7XG4gICAgICAgICAgICBicmFuZGluZ0ZvbnRDb2xvciA9IFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkRFRkFVTFRfQlJBTkRJTkdfQ09MT1I7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb2xvciA9IHtcbiAgICAgICAgICAgIEJyYW5kaW5nU2Vjb25kYXJ5Q29sb3I6IHJlcy5CcmFuZGluZ1NlY29uZGFyeUNvbG9yLFxuICAgICAgICAgICAgQnJhbmRpbmdNYWluQ29sb3I6IHJlcy5CcmFuZGluZ01haW5Db2xvcixcbiAgICAgICAgICAgIEJyYW5kaW5nRm9udENvbG9yOiBicmFuZGluZ0ZvbnRDb2xvcixcbiAgICAgICAgICAgIFNwaW5uZXJDb2xvcjogc3Bpbm5lckNvbG9yLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuc2Vzc2lvblNlcnZpY2Uuc2V0T2JqZWN0KFxuICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuVVNFUl9DT0xPUixcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGNvbG9yKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuaGFzQ3VzdG9tSGVhZGVyID1cbiAgICAgICAgICAgIHJlcy5Ub3BIZWFkZXJGaWxlcyAmJlxuICAgICAgICAgICAgICAgIHJlcy5Ub3BIZWFkZXJGaWxlcy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgcmVzLlRvcEhlYWRlckZpbGVzWzBdICE9PSAnJ1xuICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgIDogZmFsc2U7XG4gICAgICAgIHRoaXMuaGFzQ3VzdG9tSG9tZXBhZ2UgPVxuICAgICAgICAgICAgcmVzLlVzZXJSb2xlID09PSAnQnV5ZXInICYmXG4gICAgICAgICAgICByZXMuVG9wSGVhZGVyRmlsZXMgJiZcbiAgICAgICAgICAgIHJlcy5Ub3BIZWFkZXJGaWxlcy5sZW5ndGggPiAxICYmXG4gICAgICAgICAgICByZXMuVG9wSGVhZGVyRmlsZXNbMV0gIT09ICcnO1xuICAgIH1cblxuICAgIGlzTGVnYWN5Q29sb3IoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcbiAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1RPUF9IRUFERVJfS0VZICsgJy1oJ1xuICAgICAgICApO1xuICAgICAgICBjb25zdCBzID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoXG4gICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9UT1BfSEVBREVSX0tFWSArICctcydcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFxuICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfVE9QX0hFQURFUl9LRVkgKyAnLWwnXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuICEoaCAmJiBzICYmIGwpO1xuICAgIH1cblxuICAgIGdldExvYWRpbmdTcGlubmVyQ29sb3IoKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHNwaW5uZXJDb2xvciA9ICcnO1xuXG4gICAgICAgIGlmICh0aGlzLmlzTGVnYWN5Q29sb3IoKSkge1xuICAgICAgICAgICAgY29uc3QgY29sb3IgPSB0aGlzLnNlc3Npb25TZXJ2aWNlLmdldE9iamVjdChcbiAgICAgICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5VU0VSX0NPTE9SXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoY29sb3IgJiYgY29sb3IuU3Bpbm5lckNvbG9yKSB7XG4gICAgICAgICAgICAgICAgc3Bpbm5lckNvbG9yID0gY29sb3IuU3Bpbm5lckNvbG9yO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzcGlubmVyQ29sb3IgPSBQZXBDdXN0b21pemF0aW9uU2VydmljZS5ERUZBVUxUX1NQSU5ORVJfQ09MT1I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3Bpbm5lckNvbG9yO1xuICAgIH1cblxuICAgIGdldEJyYW5kaW5nTWFpbkNvbG9yKCk6IHN0cmluZyB7XG4gICAgICAgIGxldCBicmFuZGluZ01haW5Db2xvciA9ICcnO1xuXG4gICAgICAgIGlmICh0aGlzLmlzTGVnYWN5Q29sb3IoKSkge1xuICAgICAgICAgICAgY29uc3QgY29sb3IgPSB0aGlzLnNlc3Npb25TZXJ2aWNlLmdldE9iamVjdChcbiAgICAgICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5VU0VSX0NPTE9SXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoY29sb3IgJiYgY29sb3IuQnJhbmRpbmdNYWluQ29sb3IpIHtcbiAgICAgICAgICAgICAgICBicmFuZGluZ01haW5Db2xvciA9IGNvbG9yLkJyYW5kaW5nTWFpbkNvbG9yO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmFuZGluZ01haW5Db2xvciA9XG4gICAgICAgICAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkRFRkFVTFRfQlJBTkRJTkdfQ09MT1I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYnJhbmRpbmdNYWluQ29sb3I7XG4gICAgfVxuXG4gICAgaXNMaWdodENvbG9yKGhleENvbG9yKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghaGV4Q29sb3IpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBpc0JyaWdodCA9IGZhbHNlO1xuICAgICAgICBsZXQgc3VtID0gMDtcbiAgICAgICAgY29uc3QgYyA9IGhleENvbG9yLnJlcGxhY2UoL14jLywgJycpO1xuXG4gICAgICAgIHN1bSA9IHBhcnNlSW50KGNbMF0gKyBjWzFdLCAxNik7XG4gICAgICAgIHN1bSArPSBwYXJzZUludChjWzJdICsgY1szXSwgMTYpO1xuICAgICAgICBzdW0gKz0gcGFyc2VJbnQoY1s0XSArIGNbNV0sIDE2KTtcblxuICAgICAgICBpZiAoc3VtID4gMzgyLjYpIHtcbiAgICAgICAgICAgIC8vIGl0J3MgYnJpZ2h0IGNvbG9yXG4gICAgICAgICAgICBpc0JyaWdodCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXNCcmlnaHQ7XG4gICAgfVxufVxuIl19
799
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9taXphdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpYi9zcmMvY29yZS9jdXN0b21pemF0aW9uL2N1c3RvbWl6YXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7O0FBUXZDLE1BQU0sT0FBTyx1QkFBdUI7SUF5SmhDLFlBQ1ksY0FBaUMsRUFDakMsV0FBMkIsRUFDNUIsRUFBZTtRQUZkLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUNqQyxnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFDNUIsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQVZuQixzQkFBaUIsR0FBWSxJQUFJLENBQUM7UUFDbEMsb0JBQWUsR0FBWSxJQUFJLENBQUM7UUFDaEMsdUJBQWtCLEdBQUcsdUJBQXVCLENBQUMscUJBQXFCLENBQUM7UUFDbkUsbUJBQWMsR0FBRyxDQUFDLENBQUM7UUFDbkIsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUM5QyxrQkFBYSxHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBT2xELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQixFQUFFO0lBQ04sQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQW1CLEVBQUUsY0FBYyxHQUFHLElBQUk7UUFDMUQsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMvRCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDakIsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRztZQUNmLEVBQUUsS0FBSyxFQUFF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QUN4RCw2Q0FBNkM7QUFFdEMsNkNBQXFCLEdBQUcsRUFBRSxDQUFDLENBQUMsVUFBVTtBQUV0Qyw2Q0FBcUIsR0FBRyxTQUFTLENBQUM7QUFDbEMsOENBQXNCLEdBQUcsTUFBTSxDQUFDO29IQWhKOUIsdUJBQXVCO3dIQUF2Qix1QkFBdUIsY0FGcEIsTUFBTTsyRkFFVCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFBlcFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL3NlcnZpY2VzL3Nlc3Npb24uc2VydmljZSc7XG5pbXBvcnQgeyBQZXBGaWxlU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi9zZXJ2aWNlcy9maWxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGVwU3R5bGVUeXBlLCBQZXBGaWVsZEJhc2UgfSBmcm9tICcuL2N1c3RvbWl6YXRpb24ubW9kZWwnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBQZXBDdXN0b21pemF0aW9uU2VydmljZSB7XG4gICAgc3RhdGljIFNUQU5EX0FMT05FX0ZJRUxEX0NMQVNTX05BTUUgPSAncGVwLWZpZWxkJztcbiAgICBzdGF0aWMgU1RBTkRfQUxPTkVfRklFTERfTk9fU1BBQ0lOR19DTEFTU19OQU1FID0gJ3BlcC1maWVsZC1uby1zcGFjaW5nJztcblxuICAgIHN0YXRpYyBSRU1fU1RSSU5HID0gJ3JlbSc7XG4gICAgc3RhdGljIFBYX1NUUklORyA9ICdweCc7XG4gICAgc3RhdGljIFVTRVJfVEhFTUUgPSAndXNlcl90aGVtZSc7XG4gICAgc3RhdGljIFVTRVJfQ09MT1IgPSAndXNlcl9jb2xvcic7XG4gICAgc3RhdGljIFVTRVJfVEhFTUVfVkFSSUFCTEVTID0gJ3VzZXJfdGhlbWVfdmFyaWFibGVzJztcblxuICAgIC8vIEhlYWRlciBoZWlnaHRcbiAgICBzdGF0aWMgSEVBREVSX0hFSUdIVF9LRVkgPSAnLS1wZXAtaGVhZGVyLWhlaWdodCc7XG5cbiAgICAvLyBTaWRlIGJhciB2YXJpYWJsZXMga2V5c1xuICAgIHN0YXRpYyBTSURFX0JBUl9XSURUSF9LRVkgPSAnLS1wZXAtc2lkZS1iYXItd2lkdGgnO1xuXG4gICAgLy8gU2V0dGluZ3Mgd2lkdGhcbiAgICBzdGF0aWMgU0VUVElOR1NfV0lEVEhfS0VZID0gJy0tcGVwLXNldHRpbmdzLWJhci13aWR0aCc7XG5cbiAgICAvLyBUb3AgYmFyIHZhcmlhYmxlcyBrZXlzXG4gICAgc3RhdGljIFRPUF9CQVJfU1BBQ0lOR19UT1BfS0VZID0gJy0tcGVwLXRvcC1iYXItc3BhY2luZy10b3AnO1xuICAgIHN0YXRpYyBUT1BfQkFSX1NQQUNJTkdfQk9UVE9NX0tFWSA9ICctLXBlcC10b3AtYmFyLXNwYWNpbmctYm90dG9tJztcbiAgICBzdGF0aWMgVE9QX0JBUl9GSUVMRF9IRUlHSFRfS0VZID0gJy0tcGVwLXRvcC1iYXItZmllbGQtaGVpZ2h0JztcblxuICAgIC8vIEZvb3RlciB2YXJpYWJsZXMga2V5c1xuICAgIHN0YXRpYyBGT09URVJfSEVJR0hUX0tFWSA9ICctLXBlcC1mb290ZXItYmFyLWhlaWdodCc7XG4gICAgc3RhdGljIEZPT1RFUl9CQVJfU1BBQ0lOR19UT1BfS0VZID0gJy0tcGVwLWZvb3Rlci1iYXItc3BhY2luZy10b3AnO1xuICAgIHN0YXRpYyBGT09URVJfQkFSX1NQQUNJTkdfQk9UVE9NX0tFWSA9ICctLXBlcC1mb290ZXItYmFyLXNwYWNpbmctYm90dG9tJztcblxuICAgIC8vIE1haW4gY29udGFpbmVyIGhlaWdodFxuICAgIHN0YXRpYyBNQUlOX0hFSUdIVF9LRVkgPSAnLS1wZXAtbWFpbi1oZWlnaHQnO1xuXG4gICAgLy8gQ29sb3JzIHZhcmlhYmxlcyBrZXlzXG4gICAgc3RhdGljIENPTE9SX1VTRVJfUFJJTUFSWV9LRVkgPSAnLS1wZXAtY29sb3ItdXNlci1wcmltYXJ5JztcbiAgICBzdGF0aWMgQ09MT1JfVVNFUl9TRUNPTkRBUllfS0VZID0gJy0tcGVwLWNvbG9yLXVzZXItc2Vjb25kYXJ5JztcbiAgICBzdGF0aWMgQ09MT1JfU1lTVEVNX1BSSU1BUllfSU5WRVJUX0tFWSA9XG4gICAgICAgICctLXBlcC1jb2xvci1zeXN0ZW0tcHJpbWFyeS1pbnZlcnQnO1xuICAgIHN0YXRpYyBDT0xPUl9TWVNURU1fUFJJTUFSWV9LRVkgPSAnLS1wZXAtY29sb3Itc3lzdGVtLXByaW1hcnknO1xuICAgIHN0YXRpYyBDT0xPUl9URVhUX0xJTktfS0VZID0gJy0tcGVwLWNvbG9yLXRleHQtbGluayc7XG4gICAgc3RhdGljIENPTE9SX1NZU1RFTV9DQVVUSU9OX0tFWSA9ICctLXBlcC1jb2xvci1zeXN0ZW0tY2F1dGlvbic7XG4gICAgc3RhdGljIENPTE9SX1NZU1RFTV9TVUNDRVNTX0tFWSA9ICctLXBlcC1jb2xvci1zeXN0ZW0tc3VjY2Vzcyc7XG4gICAgc3RhdGljIENPTE9SX1NUUk9OR19LRVkgPSAnLS1wZXAtY29sb3Itc3Ryb25nJztcbiAgICBzdGF0aWMgQ09MT1JfUkVHVUxBUl9LRVkgPSAnLS1wZXAtY29sb3ItcmVndWxhcic7XG4gICAgc3RhdGljIENPTE9SX1dFQUtfS0VZID0gJy0tcGVwLWNvbG9yLXdlYWsnO1xuICAgIFxuICAgIC8vIFRvcCBoZWFkZXIgdmFyaWFibGVzIGtleXNcbiAgICBzdGF0aWMgQ09MT1JfVE9QX0xFR0FDWV9LRVkgPSAnLS1wZXAtY29sb3ItbGVnYWN5JztcbiAgICBzdGF0aWMgQ09MT1JfVE9QX0hFQURFUl9LRVkgPSAnLS1wZXAtY29sb3ItdG9wLWhlYWRlcic7XG4gICAgc3RhdGljIFNUWUxFX1RPUF9IRUFERVJfS0VZID0gJy0tcGVwLXN0eWxlLXRvcC1oZWFkZXInO1xuXG4gICAgLy8gTG9hZGVyIHZhcmlhYmxlcyBrZXlzXG4gICAgc3RhdGljIENPTE9SX0xPQURFUl9LRVkgPSAnLS1wZXAtY29sb3ItbG9hZGVyJztcblxuICAgIC8vIFFTIHZhcmlhYmxlcyBrZXlzXG4gICAgc3RhdGljIENPTE9SX1FTX0tFWSA9ICctLXBlcC1jb2xvci1xcyc7XG4gICAgc3RhdGljIFNUWUxFX1FTX0tFWSA9ICctLXBlcC1zdHlsZS1xcyc7XG5cbiAgICAvLyBGb250cyB2YXJpYWJsZXMga2V5c1xuICAgIHN0YXRpYyBGT05UX0ZBTUlMWV9USVRMRV9LRVkgPSAnLS1wZXAtZm9udC1mYW1pbHktdGl0bGUnO1xuICAgIHN0YXRpYyBGT05UX0ZBTUlMWV9USVRMRV9OT1JNQUxfVVJMX0tFWSA9XG4gICAgICAgICctLXBlcC1mb250LWZhbWlseS10aXRsZS1ub3JtYWwtdXJsJztcbiAgICBzdGF0aWMgRk9OVF9GQU1JTFlfVElUTEVfQk9MRF9VUkxfS0VZID0gJy0tcGVwLWZvbnQtZmFtaWx5LXRpdGxlLWJvbGQtdXJsJztcbiAgICBzdGF0aWMgRk9OVF9GQU1JTFlfQk9EWV9LRVkgPSAnLS1wZXAtZm9udC1mYW1pbHktYm9keSc7XG4gICAgc3RhdGljIEZPTlRfRkFNSUxZX0JPRFlfTk9STUFMX1VSTF9LRVkgPVxuICAgICAgICAnLS1wZXAtZm9udC1mYW1pbHktYm9keS1ub3JtYWwtdXJsJztcbiAgICBzdGF0aWMgRk9OVF9GQU1JTFlfQk9EWV9CT0xEX1VSTF9LRVkgPSAnLS1wZXAtZm9udC1mYW1pbHktYm9keS1ib2xkLXVybCc7XG5cbiAgICAvLyBCb3JkZXIgcmFkaXVzIHZhcmlhYmxlcyBrZXlzXG4gICAgc3RhdGljIEJPUkRFUl9SQURJVVNfS0VZID0gJy0tcGVwLWJvcmRlci1yYWRpdXMnO1xuICAgIHN0YXRpYyBCT1JERVJfUkFESVVTX1NNX0tFWSA9XG4gICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkJPUkRFUl9SQURJVVNfS0VZICsgJy1zbSc7XG4gICAgc3RhdGljIEJPUkRFUl9SQURJVVNfTURfS0VZID1cbiAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQk9SREVSX1JBRElVU19LRVkgKyAnLW1kJztcbiAgICBzdGF0aWMgQk9SREVSX1JBRElVU19MR19LRVkgPVxuICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5CT1JERVJfUkFESVVTX0tFWSArICctbGcnO1xuICAgIHN0YXRpYyBCT1JERVJfUkFESVVTX1hMX0tFWSA9XG4gICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkJPUkRFUl9SQURJVVNfS0VZICsgJy14bCc7XG5cbiAgICAvLyBGb250cyB2YXJpYWJsZXMga2V5c1xuICAgIHN0YXRpYyBGT05UX1NJWkVfMlhTX0tFWSA9ICctLXBlcC1mb250LXNpemUtMnhzJztcbiAgICBzdGF0aWMgRk9OVF9TSVpFX1hTX0tFWSA9ICctLXBlcC1mb250LXNpemUteHMnO1xuICAgIHN0YXRpYyBGT05UX1NJWkVfU01fS0VZID0gJy0tcGVwLWZvbnQtc2l6ZS1zbSc7XG4gICAgc3RhdGljIEZPTlRfU0laRV9NRF9LRVkgPSAnLS1wZXAtZm9udC1zaXplLW1kJztcbiAgICBzdGF0aWMgRk9OVF9TSVpFX0xHX0tFWSA9ICctLXBlcC1mb250LXNpemUtbGcnO1xuICAgIHN0YXRpYyBGT05UX1NJWkVfWExfS0VZID0gJy0tcGVwLWZvbnQtc2l6ZS14bCc7XG4gICAgc3RhdGljIEZPTlRfU0laRV8yWExfS0VZID0gJy0tcGVwLWZvbnQtc2l6ZS0yeGwnO1xuXG4gICAgLy8gTGluZSBoZWlnaHQgdmFyaWFibGVzIGtleXNcbiAgICBzdGF0aWMgTElORV9IRUlHSFRfMlhTX0tFWSA9ICctLXBlcC1saW5lLWhlaWdodC0yeHMnO1xuICAgIHN0YXRpYyBMSU5FX0hFSUdIVF9YU19LRVkgPSAnLS1wZXAtbGluZS1oZWlnaHQteHMnO1xuICAgIHN0YXRpYyBMSU5FX0hFSUdIVF9TTV9LRVkgPSAnLS1wZXAtbGluZS1oZWlnaHQtc20nO1xuICAgIHN0YXRpYyBMSU5FX0hFSUdIVF9NRF9LRVkgPSAnLS1wZXAtbGluZS1oZWlnaHQtbWQnO1xuICAgIHN0YXRpYyBMSU5FX0hFSUdIVF9MR19LRVkgPSAnLS1wZXAtbGluZS1oZWlnaHQtbGcnO1xuICAgIHN0YXRpYyBMSU5FX0hFSUdIVF9YTF9LRVkgPSAnLS1wZXAtbGluZS1oZWlnaHQteGwnO1xuICAgIHN0YXRpYyBMSU5FX0hFSUdIVF8yWExfS0VZID0gJy0tcGVwLWxpbmUtaGVpZ2h0LTJ4bCc7XG5cbiAgICAvLyBTaGFkb3dzIG9mZnNldCB2YXJpYWJsZXMga2V5c1xuICAgIHN0YXRpYyBTSEFET1dfTk9ORV9PRkZTRVRfS0VZID0gJy0tcGVwLXNoYWRvdy1ub25lLW9mZnNldCc7XG4gICAgc3RhdGljIFNIQURPV19YU19PRkZTRVRfS0VZID0gJy0tcGVwLXNoYWRvdy14cy1vZmZzZXQnO1xuICAgIHN0YXRpYyBTSEFET1dfU01fT0ZGU0VUX0tFWSA9ICctLXBlcC1zaGFkb3ctc20tb2Zmc2V0JztcbiAgICBzdGF0aWMgU0hBRE9XX01EX09GRlNFVF9LRVkgPSAnLS1wZXAtc2hhZG93LW1kLW9mZnNldCc7XG4gICAgc3RhdGljIFNIQURPV19MR19PRkZTRVRfS0VZID0gJy0tcGVwLXNoYWRvdy1sZy1vZmZzZXQnO1xuICAgIHN0YXRpYyBTSEFET1dfWExfT0ZGU0VUX0tFWSA9ICctLXBlcC1zaGFkb3cteGwtb2Zmc2V0JztcblxuICAgIC8vIFNwYWNpbmcgdmFyaWFibGVzIGtleXNcbiAgICBzdGF0aWMgU1BBQ0lOR19TSVpFXzJYU19LRVkgPSAnLS1wZXAtc3BhY2luZy0yeHMnO1xuICAgIHN0YXRpYyBTUEFDSU5HX1NJWkVfWFNfS0VZID0gJy0tcGVwLXNwYWNpbmcteHMnO1xuICAgIHN0YXRpYyBTUEFDSU5HX1NJWkVfU01fS0VZID0gJy0tcGVwLXNwYWNpbmctc20nO1xuICAgIHN0YXRpYyBTUEFDSU5HX1NJWkVfTURfS0VZID0gJy0tcGVwLXNwYWNpbmctbWQnO1xuICAgIHN0YXRpYyBTUEFDSU5HX1NJWkVfTEdfS0VZID0gJy0tcGVwLXNwYWNpbmctbGcnO1xuICAgIHN0YXRpYyBTUEFDSU5HX1NJWkVfWExfS0VZID0gJy0tcGVwLXNwYWNpbmcteGwnO1xuICAgIHN0YXRpYyBTUEFDSU5HX1NJWkVfMlhMX0tFWSA9ICctLXBlcC1zcGFjaW5nLTJ4bCc7XG4gICAgc3RhdGljIFNQQUNJTkdfU0laRV8zWExfS0VZID0gJy0tcGVwLXNwYWNpbmctM3hsJztcbiAgICBzdGF0aWMgU1BBQ0lOR19TSVpFXzRYTF9LRVkgPSAnLS1wZXAtc3BhY2luZy00eGwnO1xuICAgIHN0YXRpYyBTUEFDSU5HX1NJWkVfNVhMX0tFWSA9ICctLXBlcC1zcGFjaW5nLTV4bCc7XG4gICAgc3RhdGljIFNQQUNJTkdfU0laRV82WExfS0VZID0gJy0tcGVwLXNwYWNpbmctNnhsJztcbiAgICBzdGF0aWMgU1BBQ0lOR19TSVpFXzdYTF9LRVkgPSAnLS1wZXAtc3BhY2luZy03eGwnO1xuICAgIHN0YXRpYyBTUEFDSU5HX1NJWkVfOFhMX0tFWSA9ICctLXBlcC1zcGFjaW5nLTh4bCc7XG4gICAgc3RhdGljIFNQQUNJTkdfU0laRV85WExfS0VZID0gJy0tcGVwLXNwYWNpbmctOXhsJztcblxuICAgIC8vIEZvcm0gdmFyaWFibGVzIGtleXNcbiAgICBzdGF0aWMgRk9STV9GSUVMRF9IRUlHSFRfS0VZID0gJy0tcGVwLWZvcm0tZmllbGQtaGVpZ2h0JztcbiAgICBzdGF0aWMgRk9STV9GSUVMRF9USVRMRV9IRUlHSFRfS0VZID0gJy0tcGVwLWZvcm0tZmllbGQtdGl0bGUtaGVpZ2h0JztcbiAgICBzdGF0aWMgRk9STV9GSUVMRF9TUEFDRUlOR19LRVkgPSAnLS1wZXAtZm9ybS1maWVsZC1zcGFjaW5nJztcbiAgICBzdGF0aWMgRk9STV9TUEFDRUlOR19LRVkgPSAnLS1wZXAtZm9ybS1zcGFjaW5nJztcblxuICAgIC8vIENhcmQgdmFyaWFibGVzIGtleXNcbiAgICBzdGF0aWMgQ0FSRF9GSUVMRF9IRUlHSFRfS0VZID0gJy0tcGVwLWNhcmQtZmllbGQtaGVpZ2h0JztcbiAgICBzdGF0aWMgQ0FSRF9TUEFDRUlOR19LRVkgPSAnLS1wZXAtY2FyZC1zcGFjaW5nJztcbiAgICBzdGF0aWMgQ0FSRF9TSEFET1dfT0ZGU0VUX0tFWSA9ICctLXBlcC1zaGFkb3ctY2FyZC1vZmZzZXQnO1xuICAgIHN0YXRpYyBDQVJEX0JPUkRFUl9SQURJVVNfS0VZID0gJy0tcGVwLWNhcmQtYm9yZGVyLXJhZGl1cyc7XG5cbiAgICAvLyBUYWJsZSB2YXJpYWJsZXMga2V5c1xuICAgIHN0YXRpYyBUQUJMRV9GSUVMRF9IRUlHSFRfS0VZID0gJy0tcGVwLXRhYmxlLWZpZWxkLWhlaWdodCc7XG4gICAgc3RhdGljIFRBQkxFX1NQQUNFSU5HX0tFWSA9ICctLXBlcC10YWJsZS1zcGFjaW5nJztcbiAgICBzdGF0aWMgVEFCTEVfQk9SREVSX1JBRElVU19LRVkgPSAnLS1wZXAtdGFibGUtYm9yZGVyLXJhZGl1cyc7XG5cbiAgICAvLyAvLyBCcmFuZGluZyBrZXlzXG4gICAgLy8gc3RhdGljIEJSQU5ESU5HX0xPR09fU1JDID0gJy0tcGVwLWJyYW5kaW5nLWxvZ28tc3JjJztcbiAgICAvLyBzdGF0aWMgRkFWX0lDT05fU1JDID0gJy0tcGVwLWZhdmljb24tc3JjJztcblxuICAgIHN0YXRpYyBERUZBVUxUX0hFQURFUl9IRUlHSFQgPSA2NDsgLy8gRGVmYXVsdFxuXG4gICAgc3RhdGljIERFRkFVTFRfU1BJTk5FUl9DT0xPUiA9ICcjNzhhYTAwJztcbiAgICBzdGF0aWMgREVGQVVMVF9CUkFORElOR19DT0xPUiA9ICcjZmZmJztcblxuICAgIHB1YmxpYyBoYXNDdXN0b21Ib21lcGFnZTogYm9vbGVhbiA9IG51bGw7XG4gICAgcHVibGljIGhhc0N1c3RvbUhlYWRlcjogYm9vbGVhbiA9IG51bGw7XG4gICAgcHVibGljIGN1c3RvbUhlYWRlckhlaWdodCA9IFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkRFRkFVTFRfSEVBREVSX0hFSUdIVDtcbiAgICBwdWJsaWMgbWFpbkNvbnRIZWlnaHQgPSAwO1xuICAgIHB1YmxpYyBmb290ZXJIZWlnaHQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gICAgcHVibGljIHNldHRpbmdzV2lkdGggPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBzZXNzaW9uU2VydmljZTogUGVwU2Vzc2lvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZmlsZVNlcnZpY2U6IFBlcEZpbGVTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgZmI6IEZvcm1CdWlsZGVyXG4gICAgKSB7XG4gICAgICAgIHRoaXMuaGlkZUZvb3RlcigpO1xuICAgICAgICAvL1xuICAgIH1cblxuICAgIGdldERlZmF1bHRGcm9tR3JvdXAoZmllbGQ6IFBlcEZpZWxkQmFzZSwgd2l0aFZhbGlkYXRvcnMgPSB0cnVlKTogRm9ybUdyb3VwIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdG9ycyA9IHdpdGhWYWxpZGF0b3JzID8gZmllbGQuZ2V0VmFsaWRhdG9ycygpIDogW107XG4gICAgICAgIGNvbnN0IGdyb3VwID0ge307XG4gICAgICAgIGdyb3VwW2ZpZWxkLmtleV0gPSBbXG4gICAgICAgICAgICB7IHZhbHVlOiBmaWVsZC52YWx1ZSwgZGlzYWJsZWQ6IGZpZWxkLmRpc2FibGVkIH0sXG4gICAgICAgICAgICB2YWxpZGF0b3JzLFxuICAgICAgICBdO1xuICAgICAgICByZXR1cm4gdGhpcy5mYi5ncm91cChncm91cCk7XG4gICAgfVxuXG4gICAgZ2V0Rm9ybUNvbnRyb2woXG4gICAgICAgIGZvcm06IEZvcm1Hcm91cCxcbiAgICAgICAgZmllbGRLZXk6IHN0cmluZyxcbiAgICAgICAgcGFyZW50RmllbGRLZXk6IHN0cmluZyA9IG51bGxcbiAgICApOiBhbnkge1xuICAgICAgICBsZXQgZm9ybUNvbnRyb2wgPSBudWxsO1xuXG4gICAgICAgIGlmIChmb3JtICYmIGZvcm0uY29udHJvbHMpIHtcbiAgICAgICAgICAgIGlmIChwYXJlbnRGaWVsZEtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sID0gZm9ybS5jb250cm9sc1tmaWVsZEtleV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sID0gZm9ybS5jb250cm9sc1twYXJlbnRGaWVsZEtleV0/LmdldChmaWVsZEtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZm9ybUNvbnRyb2w7XG4gICAgfVxuXG4gICAgdXBkYXRlRm9ybUZpZWxkVmFsdWUoXG4gICAgICAgIGZvcm06IEZvcm1Hcm91cCxcbiAgICAgICAgZmllbGRLZXk6IHN0cmluZyxcbiAgICAgICAgdmFsdWUgPSAnJyxcbiAgICAgICAgcGFyZW50RmllbGRLZXk6IHN0cmluZyA9IG51bGxcbiAgICApOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSB0aGlzLmdldEZvcm1Db250cm9sKGZvcm0sIGZpZWxkS2V5LCBwYXJlbnRGaWVsZEtleSk7XG4gICAgICAgIGlmIChmb3JtQ29udHJvbCkge1xuICAgICAgICAgICAgZm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlRm9ybUZpZWxkKFxuICAgICAgICBmb3JtOiBGb3JtR3JvdXAsXG4gICAgICAgIGZpZWxkOiBQZXBGaWVsZEJhc2UsXG4gICAgICAgIHZhbHVlID0gJycsXG4gICAgICAgIHBhcmVudEZpZWxkOiBQZXBGaWVsZEJhc2UgPSBudWxsXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZvcm1Db250cm9sOiBGb3JtQ29udHJvbCA9IHRoaXMuZ2V0Rm9ybUNvbnRyb2woXG4gICAgICAgICAgICBmb3JtLFxuICAgICAgICAgICAgZmllbGQua2V5LFxuICAgICAgICAgICAgcGFyZW50RmllbGQ/LmtleVxuICAgICAgICApO1xuICAgICAgICBpZiAoZm9ybUNvbnRyb2wpIHtcbiAgICAgICAgICAgIGZvcm1Db250cm9sLnNldFZhbHVlKHZhbHVlKTtcblxuICAgICAgICAgICAgLy8gSWYgZGlzYWJsZWQgaGFzIGNoYW5nZWQuXG4gICAgICAgICAgICBpZiAoZm9ybUNvbnRyb2wuZGlzYWJsZWQgIT09IGZpZWxkLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgZmllbGQuZGlzYWJsZWQgPyBmb3JtQ29udHJvbC5kaXNhYmxlKCkgOiBmb3JtQ29udHJvbC5lbmFibGUoKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0b3JzID0gZmllbGQuZ2V0VmFsaWRhdG9ycygpO1xuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sLnNldFZhbGlkYXRvcnModmFsaWRhdG9ycyk7XG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlRm9ybUZpZWxkSGVpZ2h0KFxuICAgICAgICB3aXRoVGl0bGUgPSB0cnVlLFxuICAgICAgICByb3dTcGFuID0gMSxcbiAgICAgICAgc3RhbmRBbG9uZSA9IGZhbHNlXG4gICAgKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgdGhlbWVWYXJzID0gdGhpcy5nZXRUaGVtZVZhcmlhYmxlcygpO1xuICAgICAgICBjb25zdCByb3dGaWVsZEhlaWdodCA9IHRoaXMuZ2V0TnVtYmVyVGhlbWVWYXJpYWJsZShcbiAgICAgICAgICAgIHRoZW1lVmFycyxcbiAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPUk1fRklFTERfSEVJR0hUX0tFWVxuICAgICAgICApO1xuICAgICAgICBjb25zdCByb3dGaWVsZFRpdGxlSGVpZ2h0ID0gdGhpcy5nZXROdW1iZXJUaGVtZVZhcmlhYmxlKFxuICAgICAgICAgICAgdGhlbWVWYXJzLFxuICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9STV9GSUVMRF9USVRMRV9IRUlHSFRfS0VZXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHJvd0ZpZWxkU3BhY2luZ0JvdHRvbSA9IHRoaXMuZ2V0TnVtYmVyVGhlbWVWYXJpYWJsZShcbiAgICAgICAgICAgIHRoZW1lVmFycyxcbiAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPUk1fU1BBQ0VJTkdfS0VZXG4gICAgICAgICk7XG5cbiAgICAgICAgbGV0IGZpZWxkSGVpZ2h0ID0gMDtcbiAgICAgICAgaWYgKHJvd1NwYW4gPT09IDEpIHtcbiAgICAgICAgICAgIGZpZWxkSGVpZ2h0ID1cbiAgICAgICAgICAgICAgICAod2l0aFRpdGxlID8gcm93RmllbGRUaXRsZUhlaWdodCA6IDApICsgcm93RmllbGRIZWlnaHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByb3dTcGFuQ2FsYyA9IHdpdGhUaXRsZSA/IHJvd1NwYW4gOiByb3dTcGFuIC0gMTtcbiAgICAgICAgICAgIGZpZWxkSGVpZ2h0ID1cbiAgICAgICAgICAgICAgICByb3dTcGFuICogcm93RmllbGRIZWlnaHQgK1xuICAgICAgICAgICAgICAgIHJvd1NwYW5DYWxjICogcm93RmllbGRUaXRsZUhlaWdodCArXG4gICAgICAgICAgICAgICAgKHN0YW5kQWxvbmUgPyAwIDogcm93U3BhbkNhbGMgKiByb3dGaWVsZFNwYWNpbmdCb3R0b20pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkSGVpZ2h0O1xuICAgIH1cblxuICAgIGNhbGN1bGF0ZUNhcmRSb3dzSGVpZ2h0KHJvd3NDb3VudCA9IDEsIHdpdGhTcGFjaW5nID0gdHJ1ZSk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHRoZW1lVmFycyA9IHRoaXMuZ2V0VGhlbWVWYXJpYWJsZXMoKTtcbiAgICAgICAgY29uc3QgY2FyZEZpZWxkSGVpZ2h0ID0gdGhpcy5nZXROdW1iZXJUaGVtZVZhcmlhYmxlKFxuICAgICAgICAgICAgdGhlbWVWYXJzLFxuICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ0FSRF9GSUVMRF9IRUlHSFRfS0VZXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNhcmRGaWVsZFNwYWNpbmcgPSB0aGlzLmdldE51bWJlclRoZW1lVmFyaWFibGUoXG4gICAgICAgICAgICB0aGVtZVZhcnMsXG4gICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5DQVJEX1NQQUNFSU5HX0tFWVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGZpZWxkSGVpZ2h0ID1cbiAgICAgICAgICAgIHJvd3NDb3VudCAqIGNhcmRGaWVsZEhlaWdodCArXG4gICAgICAgICAgICAocm93c0NvdW50IC0gMSkgKiAod2l0aFNwYWNpbmcgPyBjYXJkRmllbGRTcGFjaW5nIDogMCk7XG4gICAgICAgIHJldHVybiBmaWVsZEhlaWdodDtcbiAgICB9XG5cbiAgICBjYWxjdWxhdGVUYWJsZVJvd3NIZWlnaHQocm93c0NvdW50ID0gMSwgd2l0aFNwYWNpbmcgPSB0cnVlKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgdGhlbWVWYXJzID0gdGhpcy5nZXRUaGVtZVZhcmlhYmxlcygpO1xuICAgICAgICBjb25zdCB0YWJsZUZpZWxkSGVpZ2h0ID0gdGhpcy5nZXROdW1iZXJUaGVtZVZhcmlhYmxlKFxuICAgICAgICAgICAgdGhlbWVWYXJzLFxuICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuVEFCTEVfRklFTERfSEVJR0hUX0tFWVxuICAgICAgICApO1xuICAgICAgICBjb25zdCB0YWJsZUZpZWxkU3BhY2luZyA9IHRoaXMuZ2V0TnVtYmVyVGhlbWVWYXJpYWJsZShcbiAgICAgICAgICAgIHRoZW1lVmFycyxcbiAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlRBQkxFX1NQQUNFSU5HX0tFWVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGZpZWxkSGVpZ2h0ID1cbiAgICAgICAgICAgIHJvd3NDb3VudCAqXG4gICAgICAgICAgICAodGFibGVGaWVsZEhlaWdodCArICh3aXRoU3BhY2luZyA/IHRhYmxlRmllbGRTcGFjaW5nICogMiA6IDApKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkSGVpZ2h0O1xuICAgIH1cblxuICAgIGNhbGN1bGF0ZUZpZWxkSGVpZ2h0KGxheW91dFR5cGUgPSAnZm9ybScsIHJvd1NwYW4sIHN0YW5kQWxvbmUpOiBzdHJpbmcge1xuICAgICAgICBsZXQgZmllbGRIZWlnaHQgPSAnaW5oZXJpdCc7IC8vIERlZmF1bHQgZm9yIGNhcmQgKHdpdGggbm8gdGl0bGUpXG4gICAgICAgIGlmIChsYXlvdXRUeXBlID09PSAndGFibGUnKSB7XG4gICAgICAgICAgICBmaWVsZEhlaWdodCA9IHRoaXMuZ2V0VGhlbWVWYXJpYWJsZShcbiAgICAgICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5UQUJMRV9GSUVMRF9IRUlHSFRfS0VZXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGxheW91dFR5cGUgPT09ICdjYXJkJykge1xuICAgICAgICAgICAgZmllbGRIZWlnaHQgPVxuICAgICAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlQ2FyZFJvd3NIZWlnaHQocm93U3BhbiwgIXN0YW5kQWxvbmUpICtcbiAgICAgICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRm9ybVxuICAgICAgICAgICAgZmllbGRIZWlnaHQgPVxuICAgICAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlRm9ybUZpZWxkSGVpZ2h0KGZhbHNlLCByb3dTcGFuLCBzdGFuZEFsb25lKSArXG4gICAgICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmaWVsZEhlaWdodDtcbiAgICB9XG5cbiAgICBnZXRCcmFuZGluZ1RoZW1lKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHRoZW1lT2JqID0gdGhpcy5zZXNzaW9uU2VydmljZS5nZXRPYmplY3QoXG4gICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5VU0VSX1RIRU1FXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiAodGhlbWVPYmogJiYgdGhlbWVPYmouVGhlbWUpIHx8ICdkZWZhdWx0LXRoZW1lJzsgLy8gJ2xpZ2h0LXRoZW1lJztcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0VGhlbWVMYXlvdXRWYXJpYWJsZXModGhlbWVWYXJzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gRGVjbGFyZSBkZWZhdWx0IHNjcmVlbiBzaXplcy5cbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1zY3JlZW4tbWF4LXNpemUtMnhzJ10gPVxuICAgICAgICAgICAgJzQ2MCcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5QWF9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtc2NyZWVuLW1heC1zaXplLXhzJ10gPVxuICAgICAgICAgICAgJzc2NycgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5QWF9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtc2NyZWVuLW1heC1zaXplLXNtJ10gPVxuICAgICAgICAgICAgJzk5MScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5QWF9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtc2NyZWVuLW1heC1zaXplLW1kJ10gPVxuICAgICAgICAgICAgJzExOTknICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUFhfU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLXNjcmVlbi1tYXgtc2l6ZS1sZyddID1cbiAgICAgICAgICAgICcxMzY2JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlBYX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1zY3JlZW4tbWF4LXNpemUteGwnXSA9XG4gICAgICAgICAgICAnMTkyMCcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5QWF9TVFJJTkc7XG5cbiAgICAgICAgLy8gRGVjbGFyZSBkZWZhdWx0IHRvcCBiYXIuXG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5TSURFX0JBUl9XSURUSF9LRVldID1cbiAgICAgICAgICAgICcxNicgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuXG4gICAgICAgIC8vIERlY2xhcmUgZGVmYXVsdCB0b3AgYmFyLlxuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuVE9QX0JBUl9TUEFDSU5HX1RPUF9LRVldID1cbiAgICAgICAgICAgICcxLjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlRPUF9CQVJfU1BBQ0lOR19CT1RUT01fS0VZXSA9XG4gICAgICAgICAgICAnMC41JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5UT1BfQkFSX0ZJRUxEX0hFSUdIVF9LRVldID1cbiAgICAgICAgICAgICcyLjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcblxuICAgICAgICAvLyBEZWNsYXJlIGRlZmF1bHQgZm9vdGVyLlxuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9PVEVSX0JBUl9TUEFDSU5HX1RPUF9LRVldID1cbiAgICAgICAgICAgICcwLjc1JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT09URVJfQkFSX1NQQUNJTkdfQk9UVE9NX0tFWV0gPVxuICAgICAgICAgICAgJzEuMjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0VGhlbWVCb3JkZXJSYWRpdXNWYXJpYWJsZXModGhlbWVWYXJzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkJPUkRFUl9SQURJVVNfU01fS0VZXSA9XG4gICAgICAgICAgICAnMC4xMjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkJPUkRFUl9SQURJVVNfTURfS0VZXSA9XG4gICAgICAgICAgICAnMC4yNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQk9SREVSX1JBRElVU19MR19LRVldID1cbiAgICAgICAgICAgICcwLjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkJPUkRFUl9SQURJVVNfWExfS0VZXSA9XG4gICAgICAgICAgICAnMScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgIH1cblxuICAgIGdldERlZmF1bHRUaGVtZVNwYWNpbmdWYXJpYWJsZXModGhlbWVWYXJzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNQQUNJTkdfU0laRV8yWFNfS0VZXSA9XG4gICAgICAgICAgICAnMC4xMjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNQQUNJTkdfU0laRV9YU19LRVldID1cbiAgICAgICAgICAgICcwLjI1JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5TUEFDSU5HX1NJWkVfU01fS0VZXSA9XG4gICAgICAgICAgICAnMC41JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5TUEFDSU5HX1NJWkVfTURfS0VZXSA9XG4gICAgICAgICAgICAnMC43NScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU1BBQ0lOR19TSVpFX0xHX0tFWV0gPVxuICAgICAgICAgICAgJzEnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNQQUNJTkdfU0laRV9YTF9LRVldID1cbiAgICAgICAgICAgICcxLjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNQQUNJTkdfU0laRV8yWExfS0VZXSA9XG4gICAgICAgICAgICAnMicgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU1BBQ0lOR19TSVpFXzNYTF9LRVldID1cbiAgICAgICAgICAgICcyLjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNQQUNJTkdfU0laRV80WExfS0VZXSA9XG4gICAgICAgICAgICAnMycgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU1BBQ0lOR19TSVpFXzVYTF9LRVldID1cbiAgICAgICAgICAgICczLjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNQQUNJTkdfU0laRV82WExfS0VZXSA9XG4gICAgICAgICAgICAnNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU1BBQ0lOR19TSVpFXzdYTF9LRVldID1cbiAgICAgICAgICAgICc2JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5TUEFDSU5HX1NJWkVfOFhMX0tFWV0gPVxuICAgICAgICAgICAgJzgnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNQQUNJTkdfU0laRV85WExfS0VZXSA9XG4gICAgICAgICAgICAnMTYnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0VGhlbWVGb250c1ZhcmlhYmxlcyh0aGVtZVZhcnM6IGFueSk6IHZvaWQge1xuICAgICAgICAvLyBUaXRsZSBmb250IGZhbWlseVxuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9OVF9GQU1JTFlfVElUTEVfS0VZXSA9ICdOZXhhJztcblxuICAgICAgICAvLyBCb2R5IGZvbnQgZmFtaWx5XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT05UX0ZBTUlMWV9CT0RZX0tFWV0gPSAnSW50ZXInO1xuXG4gICAgICAgIC8vIEZvbnQgc2l6ZXNcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPTlRfU0laRV8yWFNfS0VZXSA9XG4gICAgICAgICAgICAnMC42MjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPTlRfU0laRV9YU19LRVldID1cbiAgICAgICAgICAgICcwLjc1JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT05UX1NJWkVfU01fS0VZXSA9XG4gICAgICAgICAgICAnMC44NzUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPTlRfU0laRV9NRF9LRVldID1cbiAgICAgICAgICAgICcxJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT05UX1NJWkVfTEdfS0VZXSA9XG4gICAgICAgICAgICAnMS4xMjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPTlRfU0laRV9YTF9LRVldID1cbiAgICAgICAgICAgICcxLjI1JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT05UX1NJWkVfMlhMX0tFWV0gPVxuICAgICAgICAgICAgJzEuNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuXG4gICAgICAgIC8vIExpbmUgaGVpZ2h0XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5MSU5FX0hFSUdIVF8yWFNfS0VZXSA9XG4gICAgICAgICAgICAnMC43NScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuTElORV9IRUlHSFRfWFNfS0VZXSA9XG4gICAgICAgICAgICAnMScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuTElORV9IRUlHSFRfU01fS0VZXSA9XG4gICAgICAgICAgICAnMS4yNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuTElORV9IRUlHSFRfTURfS0VZXSA9XG4gICAgICAgICAgICAnMS41JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5MSU5FX0hFSUdIVF9MR19LRVldID1cbiAgICAgICAgICAgICcxLjc1JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5MSU5FX0hFSUdIVF9YTF9LRVldID1cbiAgICAgICAgICAgICcyJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5MSU5FX0hFSUdIVF8yWExfS0VZXSA9XG4gICAgICAgICAgICAnMi4yNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuXG4gICAgICAgIC8vIEZvbnQgd2VpZ2h0XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtZm9udC13ZWlnaHQtbm9ybWFsJ10gPSA0MDA7XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtZm9udC13ZWlnaHQtYm9sZCddID0gNjAwO1xuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWZvbnQtd2VpZ2h0LWJvbGRlciddID0gODAwO1xuICAgIH1cblxuICAgIGdldERlZmF1bHRUaGVtZUJ1dHRvbnNWYXJpYWJsZXModGhlbWVWYXJzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1idXR0b24tMnhzLWhvcml6b250YWwtc3BhY2luZyddID1cbiAgICAgICAgICAgICcwLjI1JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLTJ4cy1taW4td2lkdGgnXSA9XG4gICAgICAgICAgICAnMScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi0yeHMtaGVpZ2h0J10gPVxuICAgICAgICAgICAgJzEnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1idXR0b24tMnhzLWZvbnQtc2l6ZSddID1cbiAgICAgICAgICAgICd2YXIoJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPTlRfU0laRV8yWFNfS0VZICsgJyknO1xuICAgICAgICAvLyB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi0yeHMtaWNvbi1ob3Jpem9udGFsLXNwYWNpbmcnXSA9ICcwLjEyNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuXG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLXhzLWhvcml6b250YWwtc3BhY2luZyddID1cbiAgICAgICAgICAgICcwLjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1idXR0b24teHMtbWluLXdpZHRoJ10gPVxuICAgICAgICAgICAgJzEuNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi14cy1oZWlnaHQnXSA9XG4gICAgICAgICAgICAnMS41JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLXhzLWZvbnQtc2l6ZSddID1cbiAgICAgICAgICAgICd2YXIoJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPTlRfU0laRV9YU19LRVkgKyAnKSc7XG4gICAgICAgIC8vIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLXhzLWljb24taG9yaXpvbnRhbC1zcGFjaW5nJ10gPSAnMC4yNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuXG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLXNtLWhvcml6b250YWwtc3BhY2luZyddID1cbiAgICAgICAgICAgICcwLjc1JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLXNtLW1pbi13aWR0aCddID1cbiAgICAgICAgICAgICcyJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLXNtLWhlaWdodCddID1cbiAgICAgICAgICAgICcyJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLXNtLWZvbnQtc2l6ZSddID1cbiAgICAgICAgICAgICd2YXIoJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPTlRfU0laRV9TTV9LRVkgKyAnKSc7XG4gICAgICAgIC8vIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLXNtLWljb24taG9yaXpvbnRhbC1zcGFjaW5nJ10gPSAnMC41JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG5cbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1idXR0b24tbWQtaG9yaXpvbnRhbC1zcGFjaW5nJ10gPVxuICAgICAgICAgICAgJzEnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1idXR0b24tbWQtbWluLXdpZHRoJ10gPVxuICAgICAgICAgICAgJzIuNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi1tZC1oZWlnaHQnXSA9XG4gICAgICAgICAgICAnMi41JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLW1kLWZvbnQtc2l6ZSddID1cbiAgICAgICAgICAgICd2YXIoJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPTlRfU0laRV9NRF9LRVkgKyAnKSc7XG4gICAgICAgIC8vIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLW1kLWljb24taG9yaXpvbnRhbC1zcGFjaW5nJ10gPSAnMC41JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG5cbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1idXR0b24tbGctaG9yaXpvbnRhbC1zcGFjaW5nJ10gPVxuICAgICAgICAgICAgJzEnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1idXR0b24tbGctbWluLXdpZHRoJ10gPVxuICAgICAgICAgICAgJzMnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1idXR0b24tbGctaGVpZ2h0J10gPVxuICAgICAgICAgICAgJzMnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1idXR0b24tbGctZm9udC1zaXplJ10gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9OVF9TSVpFX0xHX0tFWSArICcpJztcbiAgICAgICAgLy8gdGhlbWVWYXJzWyctLXBlcC1idXR0b24tbGctaWNvbi1ob3Jpem9udGFsLXNwYWNpbmcnXSA9ICcwLjc1JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG5cbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1idXR0b24teGwtaG9yaXpvbnRhbC1zcGFjaW5nJ10gPVxuICAgICAgICAgICAgJzEuNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi14bC1taW4td2lkdGgnXSA9XG4gICAgICAgICAgICAnNCcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi14bC1oZWlnaHQnXSA9XG4gICAgICAgICAgICAnNCcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi14bC1mb250LXNpemUnXSA9XG4gICAgICAgICAgICAndmFyKCcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT05UX1NJWkVfWExfS0VZICsgJyknO1xuICAgICAgICAvLyB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi14bC1pY29uLWhvcml6b250YWwtc3BhY2luZyddID0gJzEnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICB9XG5cbiAgICBnZXRTeXN0ZW1QcmltYXJ5SW52ZXJ0Q29sb3JzVmFyaWFibGVzKHRoZW1lVmFyczogYW55KTogdm9pZCB7XG4gICAgICAgIHRoZW1lVmFyc1tcbiAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1NZU1RFTV9QUklNQVJZX0lOVkVSVF9LRVkgKyAnLWgnXG4gICAgICAgIF0gPSAnMjU1JztcbiAgICAgICAgdGhlbWVWYXJzW1xuICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfU1lTVEVNX1BSSU1BUllfSU5WRVJUX0tFWSArICctcydcbiAgICAgICAgXSA9ICcxMDAlJztcbiAgICAgICAgdGhlbWVWYXJzW1xuICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfU1lTVEVNX1BSSU1BUllfSU5WRVJUX0tFWSArICctbCdcbiAgICAgICAgXSA9ICcxMDAlJztcbiAgICB9XG5cbiAgICBnZXRTeXN0ZW1QcmltYXJ5Q29sb3JzVmFyaWFibGVzKHRoZW1lVmFyczogYW55KTogdm9pZCB7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9TWVNURU1fUFJJTUFSWV9LRVkgKyAnLWgnXSA9XG4gICAgICAgICAgICAnMCc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9TWVNURU1fUFJJTUFSWV9LRVkgKyAnLXMnXSA9XG4gICAgICAgICAgICAnMCUnO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfU1lTVEVNX1BSSU1BUllfS0VZICsgJy1sJ10gPVxuICAgICAgICAgICAgJzEwJSc7XG4gICAgfVxuXG4gICAgZ2V0U3lzdGVtU3VjY2Vzc0NvbG9yc1ZhcmlhYmxlcyh0aGVtZVZhcnM6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfU1lTVEVNX1NVQ0NFU1NfS0VZICsgJy1oJ10gPVxuICAgICAgICAgICAgJzEwMCc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9TWVNURU1fU1VDQ0VTU19LRVkgKyAnLXMnXSA9XG4gICAgICAgICAgICAnMTAwJSc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9TWVNURU1fU1VDQ0VTU19LRVkgKyAnLWwnXSA9XG4gICAgICAgICAgICAnMjUlJztcbiAgICB9XG5cbiAgICBnZXRTeXN0ZW1DYXV0aW9uQ29sb3JzVmFyaWFibGVzKHRoZW1lVmFyczogYW55KTogdm9pZCB7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9TWVNURU1fQ0FVVElPTl9LRVkgKyAnLWgnXSA9XG4gICAgICAgICAgICAnMzYwJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1NZU1RFTV9DQVVUSU9OX0tFWSArICctcyddID1cbiAgICAgICAgICAgICcxMDAlJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1NZU1RFTV9DQVVUSU9OX0tFWSArICctbCddID1cbiAgICAgICAgICAgICc0MCUnO1xuICAgIH1cblxuICAgIGdldFVzZXJQcmltYXJ5Q29sb3JzVmFyaWFibGVzKHRoZW1lVmFyczogYW55KTogdm9pZCB7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9VU0VSX1BSSU1BUllfS0VZICsgJy1oJ10gPSAnNzgnO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfVVNFUl9QUklNQVJZX0tFWSArICctcyddID1cbiAgICAgICAgICAgICc4NyUnO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfVVNFUl9QUklNQVJZX0tFWSArICctbCddID1cbiAgICAgICAgICAgICcyNyUnO1xuICAgIH1cblxuICAgIGdldFVzZXJTZWNvbmRhcnlDb2xvcnNWYXJpYWJsZXModGhlbWVWYXJzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1VTRVJfU0VDT05EQVJZX0tFWSArICctaCddID1cbiAgICAgICAgICAgICczNic7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9VU0VSX1NFQ09OREFSWV9LRVkgKyAnLXMnXSA9XG4gICAgICAgICAgICAnMTAwJSc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9VU0VSX1NFQ09OREFSWV9LRVkgKyAnLWwnXSA9XG4gICAgICAgICAgICAnNTAlJztcbiAgICB9XG5cbiAgICBnZXRXZWFrQ29sb3JzVmFyaWFibGVzKHRoZW1lVmFyczogYW55KTogdm9pZCB7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9XRUFLX0tFWSArICctaCddID1cbiAgICAgICAgICAgICd2YXIoJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1NZU1RFTV9QUklNQVJZX0tFWSArICctaCknO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfV0VBS19LRVkgKyAnLXMnXSA9XG4gICAgICAgICAgICAndmFyKCcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9TWVNURU1fUFJJTUFSWV9LRVkgKyAnLXMpJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1dFQUtfS0VZICsgJy1sJ10gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfU1lTVEVNX1BSSU1BUllfS0VZICsgJy1sKSc7XG4gICAgfVxuXG4gICAgZ2V0UmVndWxhckNvbG9yc1ZhcmlhYmxlcyh0aGVtZVZhcnM6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfUkVHVUxBUl9LRVkgKyAnLWgnXSA9XG4gICAgICAgICAgICAndmFyKCcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9TWVNURU1fUFJJTUFSWV9LRVkgKyAnLWgpJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1JFR1VMQVJfS0VZICsgJy1zJ10gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfU1lTVEVNX1BSSU1BUllfS0VZICsgJy1zKSc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9SRUdVTEFSX0tFWSArICctbCddID1cbiAgICAgICAgICAgICd2YXIoJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1NZU1RFTV9QUklNQVJZX0tFWSArICctbCknO1xuICAgIH1cblxuICAgIGdldFN0cm9uZ0NvbG9yc1ZhcmlhYmxlcyh0aGVtZVZhcnM6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfU1RST05HX0tFWSArICctaCddID1cbiAgICAgICAgICAgICd2YXIoJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1VTRVJfUFJJTUFSWV9LRVkgKyAnLWgpJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1NUUk9OR19LRVkgKyAnLXMnXSA9XG4gICAgICAgICAgICAndmFyKCcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9VU0VSX1BSSU1BUllfS0VZICsgJy1zKSc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9TVFJPTkdfS0VZICsgJy1sJ10gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfVVNFUl9QUklNQVJZX0tFWSArICctbCknO1xuICAgIH1cblxuICAgIGdldFRleHRDb2xvcnNWYXJpYWJsZXModGhlbWVWYXJzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1RFWFRfTElOS19LRVkgKyAnLWgnXSA9ICcyMDcnO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfVEVYVF9MSU5LX0tFWSArICctcyddID0gJzc2JSc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9URVhUX0xJTktfS0VZICsgJy1sJ10gPSAnMzclJztcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0VGhlbWVDb2xvcnNWYXJpYWJsZXModGhlbWVWYXJzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gU3lzdGVtIHByaW1hcnkgaW52ZXJ0IGNvbG9ycy5cbiAgICAgICAgdGhpcy5nZXRTeXN0ZW1QcmltYXJ5SW52ZXJ0Q29sb3JzVmFyaWFibGVzKHRoZW1lVmFycyk7XG4gICAgICAgIC8vIFN5c3RlbSBwcmltYXJ5IGNvbG9ycy5cbiAgICAgICAgdGhpcy5nZXRTeXN0ZW1QcmltYXJ5Q29sb3JzVmFyaWFibGVzKHRoZW1lVmFycyk7XG4gICAgICAgIC8vIFN5c3RlbSBzdWNjZXNzIGNvbG9ycy5cbiAgICAgICAgdGhpcy5nZXRTeXN0ZW1TdWNjZXNzQ29sb3JzVmFyaWFibGVzKHRoZW1lVmFycyk7XG4gICAgICAgIC8vIFN5c3RlbSBjYXV0aW9uIGNvbG9ycy5cbiAgICAgICAgdGhpcy5nZXRTeXN0ZW1DYXV0aW9uQ29sb3JzVmFyaWFibGVzKHRoZW1lVmFycyk7XG4gICAgICAgIC8vIFVzZXIgcHJpbWFyeSBjb2xvcnMuXG4gICAgICAgIHRoaXMuZ2V0VXNlclByaW1hcnlDb2xvcnNWYXJpYWJsZXModGhlbWVWYXJzKTtcbiAgICAgICAgLy8gVXNlciBzZWNvbmRhcnkgY29sb3JzLlxuICAgICAgICB0aGlzLmdldFVzZXJTZWNvbmRhcnlDb2xvcnNWYXJpYWJsZXModGhlbWVWYXJzKTtcblxuICAgICAgICAvLyBXZWFrIGNvbG9ycy5cbiAgICAgICAgdGhpcy5nZXRXZWFrQ29sb3JzVmFyaWFibGVzKHRoZW1lVmFycyk7XG4gICAgICAgIC8vIFJlZ3VsYXIgY29sb3JzLlxuICAgICAgICB0aGlzLmdldFJlZ3VsYXJDb2xvcnNWYXJpYWJsZXModGhlbWVWYXJzKTtcbiAgICAgICAgLy8gU3Ryb25nIGNvbG9ycy5cbiAgICAgICAgdGhpcy5nZXRTdHJvbmdDb2xvcnNWYXJpYWJsZXModGhlbWVWYXJzKTtcblxuICAgICAgICAvLyBUZXh0IGNvbG9ycy5cbiAgICAgICAgdGhpcy5nZXRUZXh0Q29sb3JzVmFyaWFibGVzKHRoZW1lVmFycyk7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFRoZW1lU2hhZG93c1ZhcmlhYmxlcyh0aGVtZVZhcnM6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBub25lT2Zmc2V0ID0gJzAnO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU0hBRE9XX05PTkVfT0ZGU0VUX0tFWV0gPSBub25lT2Zmc2V0O1xuXG4gICAgICAgIGNvbnN0IHhzT2Zmc2V0ID0gJzAgMC4xMjVyZW0gMC4yNXJlbSAwJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNIQURPV19YU19PRkZTRVRfS0VZXSA9IHhzT2Zmc2V0O1xuXG4gICAgICAgIGNvbnN0IHNtT2Zmc2V0ID0gJzAgMC4yNXJlbSAwLjVyZW0gMCc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5TSEFET1dfU01fT0ZGU0VUX0tFWV0gPSBzbU9mZnNldDtcblxuICAgICAgICBjb25zdCBtZE9mZnNldCA9ICcwIDAuNXJlbSAxcmVtIDAnO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU0hBRE9XX01EX09GRlNFVF9LRVldID0gbWRPZmZzZXQ7XG5cbiAgICAgICAgY29uc3QgbGdPZmZzZXQgPSAnMCAxcmVtIDJyZW0gMCc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5TSEFET1dfTEdfT0ZGU0VUX0tFWV0gPSBsZ09mZnNldDtcblxuICAgICAgICBjb25zdCB4bE9mZnNldCA9ICcwIDJyZW0gNHJlbSAwJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNIQURPV19YTF9PRkZTRVRfS0VZXSA9IHhsT2Zmc2V0O1xuICAgIH1cblxuICAgIGdldERlZmF1bHRUaGVtZUZvcm1DdXN0b21pemF0aW9uVmFyaWFibGVzKHRoZW1lVmFyczogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZvcm1GaWVsZFNwYWNpbmcgPSAxO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9STV9GSUVMRF9IRUlHSFRfS0VZXSA9XG4gICAgICAgICAgICAnMi41JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT1JNX0ZJRUxEX1RJVExFX0hFSUdIVF9LRVldID1cbiAgICAgICAgICAgICcxLjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPUk1fU1BBQ0VJTkdfS0VZXSA9XG4gICAgICAgICAgICBmb3JtRmllbGRTcGFjaW5nICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPUk1fRklFTERfU1BBQ0VJTkdfS0VZXSA9XG4gICAgICAgICAgICBmb3JtRmllbGRTcGFjaW5nICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0VGhlbWVDYXJkQ3VzdG9taXphdGlvblZhcmlhYmxlcyh0aGVtZVZhcnM6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ0FSRF9GSUVMRF9IRUlHSFRfS0VZXSA9XG4gICAgICAgICAgICAnMS41JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DQVJEX1NQQUNFSU5HX0tFWV0gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU1BBQ0lOR19TSVpFX1hTX0tFWSArICcpJztcblxuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ0FSRF9CT1JERVJfUkFESVVTX0tFWV0gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQk9SREVSX1JBRElVU19NRF9LRVkgKyAnKSc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DQVJEX1NIQURPV19PRkZTRVRfS0VZXSA9XG4gICAgICAgICAgICAndmFyKCcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5TSEFET1dfTURfT0ZGU0VUX0tFWSArICcpJztcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0VGhlbWVUYWJsZUN1c3RvbWl6YXRpb25WYXJpYWJsZXModGhlbWVWYXJzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlRBQkxFX0ZJRUxEX0hFSUdIVF9LRVldID1cbiAgICAgICAgICAgICcyJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5UQUJMRV9TUEFDRUlOR19LRVldID1cbiAgICAgICAgICAgICcwLjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlRBQkxFX0JPUkRFUl9SQURJVVNfS0VZXSA9XG4gICAgICAgICAgICAndmFyKCcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5CT1JERVJfUkFESVVTX01EX0tFWSArICcpJztcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0VGhlbWVRU0N1c3RvbWl6YXRpb25WYXJpYWJsZXModGhlbWVWYXJzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcXNTdGF0ZTogUGVwU3R5bGVUeXBlID0gJ3JlZ3VsYXInO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU1RZTEVfUVNfS0VZXSA9IHFzU3RhdGU7XG5cbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1FTX0tFWSArICctaCddID1cbiAgICAgICAgICAgICd2YXIoJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1NZU1RFTV9QUklNQVJZX0tFWSArICctaCknO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfUVNfS0VZICsgJy1zJ10gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfU1lTVEVNX1BSSU1BUllfS0VZICsgJy1zKSc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9RU19LRVkgKyAnLWwnXSA9XG4gICAgICAgICAgICAndmFyKCcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9TWVNURU1fUFJJTUFSWV9LRVkgKyAnLWwpJztcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0VGhlbWVMb2FkZXJDdXN0b21pemF0aW9uVmFyaWFibGVzKHRoZW1lVmFyczogYW55KTogdm9pZCB7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9MT0FERVJfS0VZICsgJy1oJ10gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfU1lTVEVNX0NBVVRJT05fS0VZICsgJy1oKSc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9MT0FERVJfS0VZICsgJy1zJ10gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfU1lTVEVNX0NBVVRJT05fS0VZICsgJy1zKSc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9MT0FERVJfS0VZICsgJy1sJ10gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfU1lTVEVNX0NBVVRJT05fS0VZICsgJy1sKSc7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFRoZW1lVG9wSGVhZGVyQ3VzdG9taXphdGlvblZhcmlhYmxlcyh0aGVtZVZhcnM6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCB0b3BIZWFkZXJTdGF0ZTogUGVwU3R5bGVUeXBlID0gJ3N0cm9uZyc7XG4gICAgICAgIHRoZW1lVmFyc1tcbiAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNUWUxFX1RPUF9IRUFERVJfS0VZXG4gICAgICAgIF0gPSB0b3BIZWFkZXJTdGF0ZTtcblxuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfVE9QX0hFQURFUl9LRVkgKyAnLWgnXSA9ICcnO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfVE9QX0hFQURFUl9LRVkgKyAnLXMnXSA9ICcnO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfVE9QX0hFQURFUl9LRVkgKyAnLWwnXSA9ICcnO1xuICAgIH1cblxuICAgIGdldERlZmF1bHRUaGVtZVRvcExlZ2FjeUN1c3RvbWl6YXRpb25WYXJpYWJsZXModGhlbWVWYXJzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1RPUF9MRUdBQ1lfS0VZICsgJy1oJ10gPSAnJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1RPUF9MRUdBQ1lfS0VZICsgJy1zJ10gPSAnJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1RPUF9MRUdBQ1lfS0VZICsgJy1sJ10gPSAnJztcbiAgICB9XG5cbiAgICAvLyBnZXREZWZhdWx0VGhlbWVCcmFuZGluZ0N1c3RvbWl6YXRpb25WYXJpYWJsZXModGhlbWVWYXJzOiBhbnkpOiB2b2lkIHtcbiAgICAvLyAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkJSQU5ESU5HX0xPR09fU1JDXSA9ICcvYXNzZXRzL2ltYWdlcy9QZXBwZXJpLUxvZ28tSGlSZXMucG5nJztcbiAgICAvLyAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZBVl9JQ09OX1NSQ10gPSAnL2Fzc2V0cy9mYXZpY29uLmljbyc7XG4gICAgLy8gfVxuXG4gICAgZ2V0RGVmYXVsdFRoZW1lVmFyaWFibGVzKCk6IGFueSB7XG4gICAgICAgIGNvbnN0IHRoZW1lVmFycyA9IHt9O1xuXG4gICAgICAgIC8vIERlY2xhcmUgZGVmYXVsdCBsYXlvdXQuXG4gICAgICAgIHRoaXMuZ2V0RGVmYXVsdFRoZW1lTGF5b3V0VmFyaWFibGVzKHRoZW1lVmFycyk7XG5cbiAgICAgICAgLy8gRGVjbGFyZSBkZWZhdWx0IGJvcmRlciByYWRpdXMuXG4gICAgICAgIHRoaXMuZ2V0RGVmYXVsdFRoZW1lQm9yZGVyUmFkaXVzVmFyaWFibGVzKHRoZW1lVmFycyk7XG5cbiAgICAgICAgLy8gRGVjbGFyZSBkZWZhdWx0IHNwYWNpbmcuXG4gICAgICAgIHRoaXMuZ2V0RGVmYXVsdFRoZW1lU3BhY2luZ1ZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuXG4gICAgICAgIC8vIERlY2xhcmUgZGVmYXVsdCBmb250cyBzaXplICYgbGluZSBoZWlnaHQuXG4gICAgICAgIHRoaXMuZ2V0RGVmYXVsdFRoZW1lRm9udHNWYXJpYWJsZXModGhlbWVWYXJzKTtcblxuICAgICAgICAvLyBEZWNsYXJlIGRlZmF1bHQgYnV0dG9ucy5cbiAgICAgICAgdGhpcy5nZXREZWZhdWx0VGhlbWVCdXR0b25zVmFyaWFibGVzKHRoZW1lVmFycyk7XG5cbiAgICAgICAgLy8gRGVjbGFyZSBkZWZhdWx0IGNvbG9ycy5cbiAgICAgICAgdGhpcy5nZXREZWZhdWx0VGhlbWVDb2xvcnNWYXJpYWJsZXModGhlbWVWYXJzKTtcblxuICAgICAgICAvLyBEZWNsYXJlIGRlZmF1bHQgc2hhZG93cy5cbiAgICAgICAgdGhpcy5nZXREZWZhdWx0VGhlbWVTaGFkb3dzVmFyaWFibGVzKHRoZW1lVmFycyk7XG5cbiAgICAgICAgLy8gRGVjbGFyZSBkZWZhdWx0IGZvcm0gY3VzdG9taXphdGlvbi5cbiAgICAgICAgdGhpcy5nZXREZWZhdWx0VGhlbWVGb3JtQ3VzdG9taXphdGlvblZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuXG4gICAgICAgIC8vIERlY2xhcmUgZGVmYXVsdCBjYXJkIGN1c3RvbWl6YXRpb24uXG4gICAgICAgIHRoaXMuZ2V0RGVmYXVsdFRoZW1lQ2FyZEN1c3RvbWl6YXRpb25WYXJpYWJsZXModGhlbWVWYXJzKTtcblxuICAgICAgICAvLyBEZWNsYXJlIGRlZmF1bHQgdGFibGUgY3VzdG9taXphdGlvbi5cbiAgICAgICAgdGhpcy5nZXREZWZhdWx0VGhlbWVUYWJsZUN1c3RvbWl6YXRpb25WYXJpYWJsZXModGhlbWVWYXJzKTtcblxuICAgICAgICAvLyBEZWNsYXJlIGRlZmF1bHQgcXMgY3VzdG9taXphdGlvbi5cbiAgICAgICAgdGhpcy5nZXREZWZhdWx0VGhlbWVRU0N1c3RvbWl6YXRpb25WYXJpYWJsZXModGhlbWVWYXJzKTtcblxuICAgICAgICAvLyBEZWNsYXJlIGRlZmF1bHQgdG9wIGhlYWRlciBjdXN0b21pemF0aW9uLlxuICAgICAgICB0aGlzLmdldERlZmF1bHRUaGVtZVRvcEhlYWRlckN1c3RvbWl6YXRpb25WYXJpYWJsZXModGhlbWVWYXJzKTtcblxuICAgICAgICAvLyBEZWNsYXJlIGRlZmF1bHQgdG9wIGxlZ2FjeSBjdXN0b21pemF0aW9uLlxuICAgICAgICB0aGlzLmdldERlZmF1bHRUaGVtZVRvcExlZ2FjeUN1c3RvbWl6YXRpb25WYXJpYWJsZXModGhlbWVWYXJzKTtcblxuICAgICAgICAvLyAvLyBEZWNsYXJlIGRlZmF1bHQgYnJhbmRpbmcgbG9nbydzIGN1c3RvbWl6YXRpb25cbiAgICAgICAgLy8gdGhpcy5nZXREZWZhdWx0VGhlbWVCcmFuZGluZ0N1c3RvbWl6YXRpb25WYXJpYWJsZXModGhlbWVWYXJzKTtcblxuICAgICAgICByZXR1cm4gdGhlbWVWYXJzO1xuICAgIH1cblxuICAgIGdldFRoZW1lVmFyaWFibGVzKCk6IGFueSB7XG4gICAgICAgIGNvbnN0IHJldCA9IHRoaXMuZ2V0RGVmYXVsdFRoZW1lVmFyaWFibGVzKCk7XG4gICAgICAgIGNvbnN0IHRoZW1lVmFycyA9IHRoaXMuc2Vzc2lvblNlcnZpY2UuZ2V0T2JqZWN0KFxuICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuVVNFUl9USEVNRV9WQVJJQUJMRVNcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBPdmVycmlkZSBkZWZhdWx0cy5cbiAgICAgICAgaWYgKHRoZW1lVmFycykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhlbWVWYXJzKSB7XG4gICAgICAgICAgICAgICAgcmV0W2tleV0gPSB0aGVtZVZhcnNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgc2V0VGhlbWVWYXJpYWJsZXModGhlbWVWYXJpYWJsZXNUb1NldCA9IG51bGwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGhlbWVWYXJpYWJsZXMgPSB0aGlzLmdldFRoZW1lVmFyaWFibGVzKCk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgZGVmYXVsdHMuXG4gICAgICAgIGlmICh0aGVtZVZhcmlhYmxlc1RvU2V0KSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGVtZVZhcmlhYmxlc1RvU2V0KSB7XG4gICAgICAgICAgICAgICAgdGhlbWVWYXJpYWJsZXNba2V5XSA9IHRoZW1lVmFyaWFibGVzVG9TZXRba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2Vzc2lvblNlcnZpY2Uuc2V0T2JqZWN0KFxuICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuVVNFUl9USEVNRV9WQVJJQUJMRVMsXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGVtZVZhcmlhYmxlcylcbiAgICAgICAgKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGVtZVZhcmlhYmxlcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNGb250VXJsS2V5KGtleSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVTZXJ2aWNlLmxvYWRGb250U3R5bGUoa2V5LCB0aGVtZVZhcmlhYmxlc1trZXldKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgIHRoZW1lVmFyaWFibGVzW2tleV1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNGb250VXJsS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGxldCByZXMgPSBmYWxzZTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBrZXkgPT09IFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPTlRfRkFNSUxZX1RJVExFX05PUk1BTF9VUkxfS0VZIHx8XG4gICAgICAgICAgICBrZXkgPT09IFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPTlRfRkFNSUxZX1RJVExFX0JPTERfVVJMX0tFWSB8fFxuICAgICAgICAgICAga2V5ID09PSBQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT05UX0ZBTUlMWV9CT0RZX05PUk1BTF9VUkxfS0VZIHx8XG4gICAgICAgICAgICBrZXkgPT09IFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPTlRfRkFNSUxZX0JPRFlfQk9MRF9VUkxfS0VZXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmVzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZ2V0VGhlbWVWYXJpYWJsZShrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHRoZW1lVmFycyA9IHRoaXMuZ2V0VGhlbWVWYXJpYWJsZXMoKTtcblxuICAgICAgICBpZiAodGhlbWVWYXJzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGVtZVZhcnNba2V5XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldE51bWJlclRoZW1lVmFyaWFibGUodGhlbWVWYXJzLCBrZXk6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGVtZVZhcnMgJiYgdGhlbWVWYXJzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgIC8vIElmIGl0J3MgcmVmZXJlbmNlIHRvIGFub3RoZXIga2V5LlxuICAgICAgICAgICAgaWYgKHRoZW1lVmFyc1trZXldLmluZGV4T2YoJ3ZhcignKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGtleSA9IHRoZW1lVmFyc1trZXldLnN1YnN0cig0KS5zcGxpdCgnKScpWzBdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0bXAgPSBOdW1iZXIoXG4gICAgICAgICAgICAgICAgdGhlbWVWYXJzW2tleV0ucmVwbGFjZShQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HLCAnJylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gdG1wO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEZvb3RlckhlaWdodChoZWlnaHQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZm9vdGVySGVpZ2h0LmdldFZhbHVlKCkgIT09IGhlaWdodCkge1xuICAgICAgICAgICAgLy8gaXQgaXMgcHVibGlzaGluZyB0aGlzIHZhbHVlIHRvIGFsbCB0aGUgc3Vic2NyaWJlcnMgdGhhdCBoYXZlIGFscmVhZHkgc3Vic2NyaWJlZCB0byB0aGlzIG1lc3NhZ2VcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9vdGVySGVpZ2h0Lm5leHQoaGVpZ2h0KTtcbiAgICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPT1RFUl9IRUlHSFRfS0VZLFxuICAgICAgICAgICAgaGVpZ2h0ICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklOR1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGhpZGVGb290ZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0Rm9vdGVySGVpZ2h0KDApO1xuICAgIH1cblxuICAgIHNob3dGb290ZXIoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRoZW1lVmFycyA9IHRoaXMuZ2V0VGhlbWVWYXJpYWJsZXMoKTtcblxuICAgICAgICBjb25zdCByZXMgPVxuICAgICAgICAgICAgdGhpcy5nZXROdW1iZXJUaGVtZVZhcmlhYmxlKFxuICAgICAgICAgICAgICAgIHRoZW1lVmFycyxcbiAgICAgICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT09URVJfQkFSX1NQQUNJTkdfVE9QX0tFWVxuICAgICAgICAgICAgKSArXG4gICAgICAgICAgICB0aGlzLmdldE51bWJlclRoZW1lVmFyaWFibGUoXG4gICAgICAgICAgICAgICAgdGhlbWVWYXJzLFxuICAgICAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPT1RFUl9CQVJfU1BBQ0lOR19CT1RUT01fS0VZXG4gICAgICAgICAgICApICtcbiAgICAgICAgICAgIHRoaXMuZ2V0TnVtYmVyVGhlbWVWYXJpYWJsZShcbiAgICAgICAgICAgICAgICB0aGVtZVZhcnMsXG4gICAgICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuVE9QX0JBUl9GSUVMRF9IRUlHSFRfS0VZXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuc2V0Rm9vdGVySGVpZ2h0KHJlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRTZXR0aW5nc1dpZHRoKHdpZHRoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzV2lkdGguZ2V0VmFsdWUoKSAhPT0gd2lkdGgpIHtcbiAgICAgICAgICAgIC8vIGl0IGlzIHB1Ymxpc2hpbmcgdGhpcyB2YWx1ZSB0byBhbGwgdGhlIHN1YnNjcmliZXJzIHRoYXQgaGF2ZSBhbHJlYWR5IHN1YnNjcmliZWQgdG8gdGhpcyBtZXNzYWdlXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmdzV2lkdGgubmV4dCh3aWR0aCk7XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5TRVRUSU5HU19XSURUSF9LRVksXG4gICAgICAgICAgICB3aWR0aCArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBoaWRlU2V0dGluZ3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0U2V0dGluZ3NXaWR0aCgwKTtcbiAgICB9XG5cbiAgICBzaG93U2V0dGluZ3MoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRoZW1lVmFycyA9IHRoaXMuZ2V0VGhlbWVWYXJpYWJsZXMoKTtcblxuICAgICAgICBjb25zdCByZXMgPSB0aGlzLmdldE51bWJlclRoZW1lVmFyaWFibGUoXG4gICAgICAgICAgICB0aGVtZVZhcnMsXG4gICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5TSURFX0JBUl9XSURUSF9LRVlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNldFNldHRpbmdzV2lkdGgocmVzKTtcbiAgICB9XG5cbiAgICBnZXRUb3BCYXJIZWlnaHQoKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgdGhlbWVWYXJzID0gdGhpcy5nZXRUaGVtZVZhcmlhYmxlcygpO1xuXG4gICAgICAgIGNvbnN0IHJlcyA9XG4gICAgICAgICAgICB0aGlzLmdldE51bWJlclRoZW1lVmFyaWFibGUoXG4gICAgICAgICAgICAgICAgdGhlbWVWYXJzLFxuICAgICAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlRPUF9CQVJfU1BBQ0lOR19UT1BfS0VZXG4gICAgICAgICAgICApICtcbiAgICAgICAgICAgIHRoaXMuZ2V0TnVtYmVyVGhlbWVWYXJpYWJsZShcbiAgICAgICAgICAgICAgICB0aGVtZVZhcnMsXG4gICAgICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuVE9QX0JBUl9TUEFDSU5HX0JPVFRPTV9LRVlcbiAgICAgICAgICAgICkgK1xuICAgICAgICAgICAgdGhpcy5nZXROdW1iZXJUaGVtZVZhcmlhYmxlKFxuICAgICAgICAgICAgICAgIHRoZW1lVmFycyxcbiAgICAgICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5UT1BfQkFSX0ZJRUxEX0hFSUdIVF9LRVlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBzZXRPbGRVc2VyVGhlbWUocmVzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gQWRkZWQgdXNlciB0aGVtZS5cbiAgICAgICAgY29uc3QgdGhlbWVPYmogPSB7XG4gICAgICAgICAgICBUaGVtZTogcmVzLlRoZW1lIHx8ICdkZWZhdWx0LXRoZW1lJyxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnNlc3Npb25TZXJ2aWNlLnNldE9iamVjdChcbiAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlVTRVJfVEhFTUUsXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGVtZU9iailcbiAgICAgICAgKTtcblxuICAgICAgICBsZXQgc3Bpbm5lckNvbG9yO1xuICAgICAgICBsZXQgYnJhbmRpbmdGb250Q29sb3I7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNMaWdodENvbG9yKHJlcy5CcmFuZGluZ01haW5Db2xvcikpIHtcbiAgICAgICAgICAgIHNwaW5uZXJDb2xvciA9IFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkRFRkFVTFRfU1BJTk5FUl9DT0xPUjtcbiAgICAgICAgICAgIGJyYW5kaW5nRm9udENvbG9yID0gJyMyMjInO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3Bpbm5lckNvbG9yID0gcmVzLkJyYW5kaW5nTWFpbkNvbG9yO1xuICAgICAgICAgICAgYnJhbmRpbmdGb250Q29sb3IgPSBQZXBDdXN0b21pemF0aW9uU2VydmljZS5ERUZBVUxUX0JSQU5ESU5HX0NPTE9SO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29sb3IgPSB7XG4gICAgICAgICAgICBCcmFuZGluZ1NlY29uZGFyeUNvbG9yOiByZXMuQnJhbmRpbmdTZWNvbmRhcnlDb2xvcixcbiAgICAgICAgICAgIEJyYW5kaW5nTWFpbkNvbG9yOiByZXMuQnJhbmRpbmdNYWluQ29sb3IsXG4gICAgICAgICAgICBCcmFuZGluZ0ZvbnRDb2xvcjogYnJhbmRpbmdGb250Q29sb3IsXG4gICAgICAgICAgICBTcGlubmVyQ29sb3I6IHNwaW5uZXJDb2xvcixcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnNlc3Npb25TZXJ2aWNlLnNldE9iamVjdChcbiAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlVTRVJfQ09MT1IsXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeShjb2xvcilcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmhhc0N1c3RvbUhlYWRlciA9XG4gICAgICAgICAgICByZXMuVG9wSGVhZGVyRmlsZXMgJiZcbiAgICAgICAgICAgICAgICByZXMuVG9wSGVhZGVyRmlsZXMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgIHJlcy5Ub3BIZWFkZXJGaWxlc1swXSAhPT0gJydcbiAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICB0aGlzLmhhc0N1c3RvbUhvbWVwYWdlID1cbiAgICAgICAgICAgIHJlcy5Vc2VyUm9sZSA9PT0gJ0J1eWVyJyAmJlxuICAgICAgICAgICAgcmVzLlRvcEhlYWRlckZpbGVzICYmXG4gICAgICAgICAgICByZXMuVG9wSGVhZGVyRmlsZXMubGVuZ3RoID4gMSAmJlxuICAgICAgICAgICAgcmVzLlRvcEhlYWRlckZpbGVzWzFdICE9PSAnJztcbiAgICB9XG5cbiAgICBpc0xlZ2FjeUNvbG9yKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoXG4gICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9UT1BfSEVBREVSX0tFWSArICctaCdcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcyA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFxuICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfVE9QX0hFQURFUl9LRVkgKyAnLXMnXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcbiAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1RPUF9IRUFERVJfS0VZICsgJy1sJ1xuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiAhKGggJiYgcyAmJiBsKTtcbiAgICB9XG5cbiAgICBnZXRMb2FkaW5nU3Bpbm5lckNvbG9yKCk6IHN0cmluZyB7XG4gICAgICAgIGxldCBzcGlubmVyQ29sb3IgPSAnJztcblxuICAgICAgICBpZiAodGhpcy5pc0xlZ2FjeUNvbG9yKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yID0gdGhpcy5zZXNzaW9uU2VydmljZS5nZXRPYmplY3QoXG4gICAgICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuVVNFUl9DT0xPUlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGNvbG9yICYmIGNvbG9yLlNwaW5uZXJDb2xvcikge1xuICAgICAgICAgICAgICAgIHNwaW5uZXJDb2xvciA9IGNvbG9yLlNwaW5uZXJDb2xvcjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3Bpbm5lckNvbG9yID0gUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuREVGQVVMVF9TUElOTkVSX0NPTE9SO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNwaW5uZXJDb2xvcjtcbiAgICB9XG5cbiAgICBnZXRCcmFuZGluZ01haW5Db2xvcigpOiBzdHJpbmcge1xuICAgICAgICBsZXQgYnJhbmRpbmdNYWluQ29sb3IgPSAnJztcblxuICAgICAgICBpZiAodGhpcy5pc0xlZ2FjeUNvbG9yKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yID0gdGhpcy5zZXNzaW9uU2VydmljZS5nZXRPYmplY3QoXG4gICAgICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuVVNFUl9DT0xPUlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGNvbG9yICYmIGNvbG9yLkJyYW5kaW5nTWFpbkNvbG9yKSB7XG4gICAgICAgICAgICAgICAgYnJhbmRpbmdNYWluQ29sb3IgPSBjb2xvci5CcmFuZGluZ01haW5Db2xvcjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJhbmRpbmdNYWluQ29sb3IgPVxuICAgICAgICAgICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5ERUZBVUxUX0JSQU5ESU5HX0NPTE9SO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGJyYW5kaW5nTWFpbkNvbG9yO1xuICAgIH1cblxuICAgIGlzTGlnaHRDb2xvcihoZXhDb2xvcik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIWhleENvbG9yKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaXNCcmlnaHQgPSBmYWxzZTtcbiAgICAgICAgbGV0IHN1bSA9IDA7XG4gICAgICAgIGNvbnN0IGMgPSBoZXhDb2xvci5yZXBsYWNlKC9eIy8sICcnKTtcblxuICAgICAgICBzdW0gPSBwYXJzZUludChjWzBdICsgY1sxXSwgMTYpO1xuICAgICAgICBzdW0gKz0gcGFyc2VJbnQoY1syXSArIGNbM10sIDE2KTtcbiAgICAgICAgc3VtICs9IHBhcnNlSW50KGNbNF0gKyBjWzVdLCAxNik7XG5cbiAgICAgICAgaWYgKHN1bSA+IDM4Mi42KSB7XG4gICAgICAgICAgICAvLyBpdCdzIGJyaWdodCBjb2xvclxuICAgICAgICAgICAgaXNCcmlnaHQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlzQnJpZ2h0O1xuICAgIH1cbn1cbiJdfQ==
@@ -64,15 +64,24 @@ export class PepHttpService {
64
64
  if (!httpOptions.headers.has(this.PEPPERI_TOKEN_HEADER)) {
65
65
  const wapiBaseUrl = this.sessionService.getWapiBaseUrl();
66
66
  if (wapiBaseUrl && url.match(new RegExp(wapiBaseUrl, 'g'))) {
67
- // TODO:
68
- // const webApiToken = this.sessionService.getWapiToken();
69
67
  try {
70
- const userSettingCookie = this.cookieService.get(this.PEPPERI_TOKEN_COOKIE);
71
- const webApiToken = JSON.parse(userSettingCookie).values
72
- .items[this.WAPI_TOKEN_KEY];
73
- if (webApiToken) {
74
- httpOptions.headers = httpOptions.headers.set(this.PEPPERI_TOKEN_HEADER, webApiToken);
68
+ // This is the new code cause the cookie isn't exist anymore.
69
+ const sessionToken = this.sessionService.getSessionToken();
70
+ if (sessionToken) {
71
+ httpOptions.headers = httpOptions.headers.set(this.PEPPERI_TOKEN_HEADER, sessionToken);
75
72
  }
73
+ // Old code
74
+ // const userSettingCookie = this.cookieService.get(
75
+ // this.PEPPERI_TOKEN_COOKIE
76
+ // );
77
+ // const webApiToken = JSON.parse(userSettingCookie).values
78
+ // .items[this.WAPI_TOKEN_KEY];
79
+ // if (webApiToken) {
80
+ // httpOptions.headers = httpOptions.headers.set(
81
+ // this.PEPPERI_TOKEN_HEADER,
82
+ // webApiToken
83
+ // );
84
+ // }
76
85
  }
77
86
  catch {
78
87
  // Do nothing.
@@ -152,4 +161,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
152
161
  providedIn: 'root',
153
162
  }]
154
163
  }], ctorParameters: function () { return [{ type: i1.PepSessionService }, { type: i2.PepCookieService }, { type: i3.HttpClient }]; } });
155
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpYi9zcmMvY29yZS9odHRwL3NlcnZpY2VzL2h0dHAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFJSCxXQUFXLEdBQ2QsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsVUFBVSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBUyxVQUFVLEVBQU8sTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFPeEQsTUFBTSxPQUFPLGNBQWM7SUFNdkIsWUFDWSxjQUFpQyxFQUNqQyxhQUErQixFQUMvQixJQUFnQjtRQUZoQixtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFDakMsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQy9CLFNBQUksR0FBSixJQUFJLENBQVk7UUFSWCxnQkFBVyxHQUFHLGVBQWUsQ0FBQztRQUM5Qix5QkFBb0IsR0FBRyxxQkFBcUIsQ0FBQztRQUM3QyxtQkFBYyxHQUFHLFlBQVksQ0FBQztRQUM5Qix5QkFBb0IsR0FBRyxxQkFBcUIsQ0FBQztJQU0zRCxDQUFDO0lBRUksV0FBVyxDQUFDLFFBQTJCO1FBQzNDLElBQUksWUFBWSxHQUFHLGdCQUFnQixDQUFDO1FBQ3BDLElBQUksUUFBUSxDQUFDLEtBQUssWUFBWSxVQUFVLEVBQUU7WUFDdEMscUJBQXFCO1lBQ3JCLFlBQVksR0FBRyxVQUFVLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDckQ7YUFBTTtZQUNILHFCQUFxQjtZQUNyQixZQUFZLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3ZEO1FBRUQsT0FBTyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVP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QUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBIdHRwQ2xpZW50LFxuICAgIEh0dHBFcnJvclJlc3BvbnNlLFxuICAgIEh0dHBQYXJhbXMsXG4gICAgSHR0cEhlYWRlcnMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IHRocm93RXJyb3IsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHJldHJ5LCBjYXRjaEVycm9yLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBQZXBTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9zZXJ2aWNlcy9zZXNzaW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGVwQ29va2llU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9zZXJ2aWNlcy9jb29raWUuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFBlcEh0dHBTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IEFVVEhfSEVBREVSID0gJ0F1dGhvcml6YXRpb24nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgUEVQUEVSSV9UT0tFTl9IRUFERVIgPSAnUGVwcGVyaVNlc3Npb25Ub2tlbic7XG4gICAgcHJpdmF0ZSByZWFkb25seSBXQVBJX1RPS0VOX0tFWSA9ICdhdXRoX3Rva2VuJztcbiAgICBwcml2YXRlIHJlYWRvbmx5IFBFUFBFUklfVE9LRU5fQ09PS0lFID0gJ1BlcHBlcmlVc2VyU2V0dGluZ3MnO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgc2Vzc2lvblNlcnZpY2U6IFBlcFNlc3Npb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvb2tpZVNlcnZpY2U6IFBlcENvb2tpZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudFxuICAgICkge31cblxuICAgIHByaXZhdGUgaGFuZGxlRXJyb3IocmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKTogT2JzZXJ2YWJsZTxuZXZlcj4ge1xuICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gJ1Vua25vd24gZXJyb3IhJztcbiAgICAgICAgaWYgKHJlc3BvbnNlLmVycm9yIGluc3RhbmNlb2YgRXJyb3JFdmVudCkge1xuICAgICAgICAgICAgLy8gQ2xpZW50LXNpZGUgZXJyb3JzXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgRXJyb3I6ICR7cmVzcG9uc2UuZXJyb3IubWVzc2FnZX1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gU2VydmVyLXNpZGUgZXJyb3JzXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSB0aGlzLmdldFNlcnZlckVycm9yTWVzc2FnZShyZXNwb25zZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2VydmVyRXJyb3JNZXNzYWdlKHJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSk6IHN0cmluZyB7XG4gICAgICAgIGlmIChyZXNwb25zZT8uZXJyb3I/LmZhdWx0Py5mYXVsdHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIGAke3Jlc3BvbnNlLmVycm9yLmZhdWx0LmZhdWx0c3RyaW5nfWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgICAgICAgICAgIGNhc2UgNDA0OiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgTm90IEZvdW5kOiAke3Jlc3BvbnNlLm1lc3NhZ2V9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA0MDM6IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBBY2Nlc3MgRGVuaWVkOiAke3Jlc3BvbnNlLm1lc3NhZ2V9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA1MDA6IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3I6ICR7cmVzcG9uc2UubWVzc2FnZX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgVW5rbm93biBTZXJ2ZXIgRXJyb3JcXG5FcnJvciBDb2RlOiAke3Jlc3BvbnNlLnN0YXR1c31cXG5NZXNzYWdlOiAke3Jlc3BvbnNlLm1lc3NhZ2V9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgYXV0aG9yaXphdGlvbiB0b2tlbiBpZiB0aGUgdG9rZW4gZXhpc3QuXG4gICAgcHJpdmF0ZSBhZGRBdXRob3JpemF0aW9uVG9rZW4oaHR0cE9wdGlvbnM6IGFueSA9IHt9KTogYW55IHtcbiAgICAgICAgaWYgKCFodHRwT3B0aW9ucy5oZWFkZXJzLmhhcyh0aGlzLkFVVEhfSEVBREVSKSkge1xuICAgICAgICAgICAgY29uc3QgaWRwVG9rZW4gPSB0aGlzLnNlc3Npb25TZXJ2aWNlLmdldElkcFRva2VuKCk7XG5cbiAgICAgICAgICAgIGlmIChpZHBUb2tlbikge1xuICAgICAgICAgICAgICAgIGh0dHBPcHRpb25zLmhlYWRlcnMgPSBodHRwT3B0aW9ucy5oZWFkZXJzLnNldChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5BVVRIX0hFQURFUixcbiAgICAgICAgICAgICAgICAgICAgYEJlYXJlciAke2lkcFRva2VufWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGh0dHBPcHRpb25zO1xuICAgIH1cblxuICAgIC8vIEFkZCB3ZWIgYXBpIHRva2VuIGlmIGNhbGxpbmcgdG8gd2FwaSBkb21haW4uXG4gICAgcHJpdmF0ZSBhZGRXZWJBcGlUb2tlbih1cmw6IHN0cmluZywgaHR0cE9wdGlvbnM6IGFueSA9IHt9KTogYW55IHtcbiAgICAgICAgaWYgKCFodHRwT3B0aW9ucy5oZWFkZXJzLmhhcyh0aGlzLlBFUFBFUklfVE9LRU5fSEVBREVSKSkge1xuICAgICAgICAgICAgY29uc3Qgd2FwaUJhc2VVcmwgPSB0aGlzLnNlc3Npb25TZXJ2aWNlLmdldFdhcGlCYXNlVXJsKCk7XG5cbiAgICAgICAgICAgIGlmICh3YXBpQmFzZVVybCAmJiB1cmwubWF0Y2gobmV3IFJlZ0V4cCh3YXBpQmFzZVVybCwgJ2cnKSkpIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOlxuICAgICAgICAgICAgICAgIC8vIGNvbnN0IHdlYkFwaVRva2VuID0gdGhpcy5zZXNzaW9uU2VydmljZS5nZXRXYXBpVG9rZW4oKTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1c2VyU2V0dGluZ0Nvb2tpZSA9IHRoaXMuY29va2llU2VydmljZS5nZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlBFUFBFUklfVE9LRU5fQ09PS0lFXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdlYkFwaVRva2VuID0gSlNPTi5wYXJzZSh1c2VyU2V0dGluZ0Nvb2tpZSkudmFsdWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAuaXRlbXNbdGhpcy5XQVBJX1RPS0VOX0tFWV07XG4gICAgICAgICAgICAgICAgICAgIGlmICh3ZWJBcGlUb2tlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cE9wdGlvbnMuaGVhZGVycyA9IGh0dHBPcHRpb25zLmhlYWRlcnMuc2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuUEVQUEVSSV9UT0tFTl9IRUFERVIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ViQXBpVG9rZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90aGluZy5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaHR0cE9wdGlvbnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREZWZhdWx0SGVhZGVyT3B0aW9ucyh1cmw6IHN0cmluZywgaHR0cE9wdGlvbnM6IGFueSA9IHt9KTogYW55IHtcbiAgICAgICAgaWYgKCFodHRwT3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgICAgICBodHRwT3B0aW9ucy5oZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgY29udGVudCB0eXBlXG4gICAgICAgIGlmICghaHR0cE9wdGlvbnMuaGVhZGVycy5oYXMoJ0NvbnRlbnQtVHlwZScpKSB7XG4gICAgICAgICAgICBodHRwT3B0aW9ucy5oZWFkZXJzID0gaHR0cE9wdGlvbnMuaGVhZGVycy5zZXQoXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZScsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaHR0cE9wdGlvbnMgPSB0aGlzLmFkZEF1dGhvcml6YXRpb25Ub2tlbihodHRwT3B0aW9ucyk7XG4gICAgICAgIGh0dHBPcHRpb25zID0gdGhpcy5hZGRXZWJBcGlUb2tlbih1cmwsIGh0dHBPcHRpb25zKTtcblxuICAgICAgICByZXR1cm4gaHR0cE9wdGlvbnM7XG4gICAgfVxuXG4gICAgLy8gZ2V0VGV4dEZpbGUoZmlsZW5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vICAgICAvLyBUaGUgT2JzZXJ2YWJsZSByZXR1cm5lZCBieSBnZXQoKSBpcyBvZiB0eXBlIE9ic2VydmFibGU8c3RyaW5nPlxuICAgIC8vICAgICAvLyBiZWNhdXNlIGEgdGV4dCByZXNwb25zZSB3YXMgc3BlY2lmaWVkLlxuICAgIC8vICAgICAvLyBUaGVyZSdzIG5vIG5lZWQgdG8gcGFzcyBhIDxzdHJpbmc+IHR5cGUgcGFyYW1ldGVyIHRvIGdldCgpLlxuICAgIC8vICAgICAvLyByZXR1cm4gdGhpcy5odHRwLmdldChmaWxlbmFtZSwge3Jlc3BvbnNlVHlwZTogJ3RleHQnfSlcbiAgICAvLyAgICAgLy8gICAgIC5waXBlKFxuICAgIC8vICAgICAvLyAgICAgICAgIHRhcCggLy8gTG9nIHRoZSByZXN1bHQgb3IgZXJyb3JcbiAgICAvLyAgICAgLy8gICAgICAgICBkYXRhID0+IHRoaXMubG9nKGZpbGVuYW1lLCBkYXRhKSxcbiAgICAvLyAgICAgLy8gICAgICAgICBlcnJvciA9PiB0aGlzLmxvZ0Vycm9yKGZpbGVuYW1lLCBlcnJvcilcbiAgICAvLyAgICAgLy8gICAgICAgICApXG4gICAgLy8gICAgIC8vICk7XG4gICAgLy8gfVxuXG4gICAgZ2V0SHR0cENhbGwodXJsOiBzdHJpbmcsIGh0dHBPcHRpb25zOiBhbnkgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGh0dHBPcHRpb25zID0gdGhpcy5zZXREZWZhdWx0SGVhZGVyT3B0aW9ucyh1cmwsIGh0dHBPcHRpb25zKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgICAgICAuZ2V0KHVybCwgaHR0cE9wdGlvbnMpXG4gICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IuYmluZCh0aGlzKSkpO1xuICAgICAgICAvLyAgICAgLnN1YnNjcmliZShcbiAgICAgICAgLy8gICAgICAgICAocmVzKSA9PiBjb25zb2xlLmxvZygnJyksXG4gICAgICAgIC8vICAgICAgICAgKGVycm9yKSA9PiBjb25zb2xlLmxvZygnJyksXG4gICAgICAgIC8vICAgICAgICAgKCkgPT4ge31cbiAgICAgICAgLy8gKTtcbiAgICB9XG5cbiAgICBwb3N0SHR0cENhbGwoXG4gICAgICAgIHVybDogc3RyaW5nLFxuICAgICAgICBib2R5OiBhbnkgfCBudWxsLFxuICAgICAgICBodHRwT3B0aW9uczogYW55ID0ge31cbiAgICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBodHRwT3B0aW9ucyA9IHRoaXMuc2V0RGVmYXVsdEhlYWRlck9wdGlvbnModXJsLCBodHRwT3B0aW9ucyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgLnBvc3QodXJsLCBib2R5LCBodHRwT3B0aW9ucylcbiAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvci5iaW5kKHRoaXMpKSk7XG4gICAgICAgIC8vICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAvLyAgICAgICAgIChyZXMpID0+IGNvbnNvbGUubG9nKCcnKSxcbiAgICAgICAgLy8gICAgICAgICAoZXJyb3IpID0+IGNvbnNvbGUubG9nKCcnKSxcbiAgICAgICAgLy8gICAgICAgICAoKSA9PiB7fVxuICAgICAgICAvLyApO1xuICAgIH1cblxuICAgIGdldFdhcGlBcGlDYWxsKHVybDogc3RyaW5nLCBodHRwT3B0aW9uczogYW55ID0ge30pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCB3YXBpQmFzZVVybCA9IHRoaXMuc2Vzc2lvblNlcnZpY2UuZ2V0V2FwaUJhc2VVcmwoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SHR0cENhbGwoYCR7d2FwaUJhc2VVcmx9JHt1cmx9YCwgaHR0cE9wdGlvbnMpO1xuICAgIH1cblxuICAgIHBvc3RXYXBpQXBpQ2FsbChcbiAgICAgICAgdXJsOiBzdHJpbmcsXG4gICAgICAgIGJvZHk6IGFueSB8IG51bGwsXG4gICAgICAgIGh0dHBPcHRpb25zOiBhbnkgPSB7fVxuICAgICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHdhcGlCYXNlVXJsID0gdGhpcy5zZXNzaW9uU2VydmljZS5nZXRXYXBpQmFzZVVybCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wb3N0SHR0cENhbGwoYCR7d2FwaUJhc2VVcmx9JHt1cmx9YCwgYm9keSwgaHR0cE9wdGlvbnMpO1xuICAgIH1cblxuICAgIGdldFBhcGlBcGlDYWxsKHVybDogc3RyaW5nLCBodHRwT3B0aW9uczogYW55ID0ge30pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBwYXBpQmFzZVVybCA9IHRoaXMuc2Vzc2lvblNlcnZpY2UuZ2V0UGFwaUJhc2VVcmwoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SHR0cENhbGwoYCR7cGFwaUJhc2VVcmx9JHt1cmx9YCwgaHR0cE9wdGlvbnMpO1xuICAgIH1cblxuICAgIHBvc3RQYXBpQXBpQ2FsbChcbiAgICAgICAgdXJsOiBzdHJpbmcsXG4gICAgICAgIGJvZHk6IGFueSB8IG51bGwsXG4gICAgICAgIGh0dHBPcHRpb25zOiBhbnkgPSB7fVxuICAgICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHBhcGlCYXNlVXJsID0gdGhpcy5zZXNzaW9uU2VydmljZS5nZXRQYXBpQmFzZVVybCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wb3N0SHR0cENhbGwoYCR7cGFwaUJhc2VVcmx9JHt1cmx9YCwgYm9keSwgaHR0cE9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8vIGdldEFwaUNhbGwodXJsOiBzdHJpbmcsIGh0dHBPcHRpb25zOiBhbnkgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgLy8gICAgIGNvbnN0IGFwaUJhc2VVcmwgPSB0aGlzLnNlc3Npb25TZXJ2aWNlLmdldEFwaUJhc2VVcmwoKTtcbiAgICAvLyAgICAgcmV0dXJuIHRoaXMuZ2V0SHR0cENhbGwoYCR7YXBpQmFzZVVybH0ke3VybH1gLCBodHRwT3B0aW9ucyk7XG4gICAgLy8gfVxuXG4gICAgLy8gcG9zdEFwaUNhbGwoXG4gICAgLy8gICAgIHVybDogc3RyaW5nLFxuICAgIC8vICAgICBib2R5OiBhbnkgfCBudWxsLFxuICAgIC8vICAgICBodHRwT3B0aW9uczogYW55ID0ge31cbiAgICAvLyApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIC8vICAgICBjb25zdCBhcGlCYXNlVXJsID0gdGhpcy5zZXNzaW9uU2VydmljZS5nZXRBcGlCYXNlVXJsKCk7XG4gICAgLy8gICAgIHJldHVybiB0aGlzLnBvc3RIdHRwQ2FsbChgJHthcGlCYXNlVXJsfSR7dXJsfWAsIGJvZHksIGh0dHBPcHRpb25zKTtcbiAgICAvLyB9XG59XG4iXX0=
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpYi9zcmMvY29yZS9odHRwL3NlcnZpY2VzL2h0dHAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFJSCxXQUFXLEdBQ2QsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsVUFBVSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBUyxVQUFVLEVBQU8sTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFPeEQsTUFBTSxPQUFPLGNBQWM7SUFNdkIsWUFDWSxjQUFpQyxFQUNqQyxhQUErQixFQUMvQixJQUFnQjtRQUZoQixtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFDakMsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQy9CLFNBQUksR0FBSixJQUFJLENBQVk7UUFSWCxnQkFBVyxHQUFHLGVBQWUsQ0FBQztRQUM5Qix5QkFBb0IsR0FBRyxxQkFBcUIsQ0FBQztRQUM3QyxtQkFBYyxHQUFHLFlBQVksQ0FBQztRQUM5Qix5QkFBb0IsR0FBRyxxQkFBcUIsQ0FBQztJQU0zRCxDQUFDO0lBRUksV0FBVyxDQUFDLFFBQTJCO1FBQzNDLElBQUksWUFBWSxHQUFHLGdCQUFnQixDQUFDO1FBQ3BDLElBQUksUUFBUSxDQUFDLEtBQUssWUFBWSxVQUFVLEVBQUU7WUFDdEMscUJBQXFCO1lBQ3JCLFlBQVksR0FBRyxVQUFVLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDckQ7YUFBTTtZQUNILHFCQUFxQjtZQUNyQixZQUFZLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3ZEO1FBRUQsT0FBTyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVP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QztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIEh0dHBDbGllbnQsXG4gICAgSHR0cEVycm9yUmVzcG9uc2UsXG4gICAgSHR0cFBhcmFtcyxcbiAgICBIdHRwSGVhZGVycyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgdGhyb3dFcnJvciwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgcmV0cnksIGNhdGNoRXJyb3IsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFBlcFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tbW9uL3NlcnZpY2VzL3Nlc3Npb24uc2VydmljZSc7XG5pbXBvcnQgeyBQZXBDb29raWVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tbW9uL3NlcnZpY2VzL2Nvb2tpZS5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUGVwSHR0cFNlcnZpY2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgQVVUSF9IRUFERVIgPSAnQXV0aG9yaXphdGlvbic7XG4gICAgcHJpdmF0ZSByZWFkb25seSBQRVBQRVJJX1RPS0VOX0hFQURFUiA9ICdQZXBwZXJpU2Vzc2lvblRva2VuJztcbiAgICBwcml2YXRlIHJlYWRvbmx5IFdBUElfVE9LRU5fS0VZID0gJ2F1dGhfdG9rZW4nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgUEVQUEVSSV9UT0tFTl9DT09LSUUgPSAnUGVwcGVyaVVzZXJTZXR0aW5ncyc7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBzZXNzaW9uU2VydmljZTogUGVwU2Vzc2lvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY29va2llU2VydmljZTogUGVwQ29va2llU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50XG4gICAgKSB7fVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVFcnJvcihyZXNwb25zZTogSHR0cEVycm9yUmVzcG9uc2UpOiBPYnNlcnZhYmxlPG5ldmVyPiB7XG4gICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSAnVW5rbm93biBlcnJvciEnO1xuICAgICAgICBpZiAocmVzcG9uc2UuZXJyb3IgaW5zdGFuY2VvZiBFcnJvckV2ZW50KSB7XG4gICAgICAgICAgICAvLyBDbGllbnQtc2lkZSBlcnJvcnNcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGBFcnJvcjogJHtyZXNwb25zZS5lcnJvci5tZXNzYWdlfWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBTZXJ2ZXItc2lkZSBlcnJvcnNcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKHJlc3BvbnNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTZXJ2ZXJFcnJvck1lc3NhZ2UocmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlPy5lcnJvcj8uZmF1bHQ/LmZhdWx0c3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7cmVzcG9uc2UuZXJyb3IuZmF1bHQuZmF1bHRzdHJpbmd9YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSA0MDQ6IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBOb3QgRm91bmQ6ICR7cmVzcG9uc2UubWVzc2FnZX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDQwMzoge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEFjY2VzcyBEZW5pZWQ6ICR7cmVzcG9uc2UubWVzc2FnZX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIDUwMDoge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEludGVybmFsIFNlcnZlciBFcnJvcjogJHtyZXNwb25zZS5tZXNzYWdlfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBVbmtub3duIFNlcnZlciBFcnJvclxcbkVycm9yIENvZGU6ICR7cmVzcG9uc2Uuc3RhdHVzfVxcbk1lc3NhZ2U6ICR7cmVzcG9uc2UubWVzc2FnZX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCBhdXRob3JpemF0aW9uIHRva2VuIGlmIHRoZSB0b2tlbiBleGlzdC5cbiAgICBwcml2YXRlIGFkZEF1dGhvcml6YXRpb25Ub2tlbihodHRwT3B0aW9uczogYW55ID0ge30pOiBhbnkge1xuICAgICAgICBpZiAoIWh0dHBPcHRpb25zLmhlYWRlcnMuaGFzKHRoaXMuQVVUSF9IRUFERVIpKSB7XG4gICAgICAgICAgICBjb25zdCBpZHBUb2tlbiA9IHRoaXMuc2Vzc2lvblNlcnZpY2UuZ2V0SWRwVG9rZW4oKTtcblxuICAgICAgICAgICAgaWYgKGlkcFRva2VuKSB7XG4gICAgICAgICAgICAgICAgaHR0cE9wdGlvbnMuaGVhZGVycyA9IGh0dHBPcHRpb25zLmhlYWRlcnMuc2V0KFxuICAgICAgICAgICAgICAgICAgICB0aGlzLkFVVEhfSEVBREVSLFxuICAgICAgICAgICAgICAgICAgICBgQmVhcmVyICR7aWRwVG9rZW59YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaHR0cE9wdGlvbnM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHdlYiBhcGkgdG9rZW4gaWYgY2FsbGluZyB0byB3YXBpIGRvbWFpbi5cbiAgICBwcml2YXRlIGFkZFdlYkFwaVRva2VuKHVybDogc3RyaW5nLCBodHRwT3B0aW9uczogYW55ID0ge30pOiBhbnkge1xuICAgICAgICBpZiAoIWh0dHBPcHRpb25zLmhlYWRlcnMuaGFzKHRoaXMuUEVQUEVSSV9UT0tFTl9IRUFERVIpKSB7XG4gICAgICAgICAgICBjb25zdCB3YXBpQmFzZVVybCA9IHRoaXMuc2Vzc2lvblNlcnZpY2UuZ2V0V2FwaUJhc2VVcmwoKTtcblxuICAgICAgICAgICAgaWYgKHdhcGlCYXNlVXJsICYmIHVybC5tYXRjaChuZXcgUmVnRXhwKHdhcGlCYXNlVXJsLCAnZycpKSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIG5ldyBjb2RlIGNhdXNlIHRoZSBjb29raWUgaXNuJ3QgZXhpc3QgYW55bW9yZS5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2Vzc2lvblRva2VuID0gdGhpcy5zZXNzaW9uU2VydmljZS5nZXRTZXNzaW9uVG9rZW4oKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlc3Npb25Ub2tlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cE9wdGlvbnMuaGVhZGVycyA9IGh0dHBPcHRpb25zLmhlYWRlcnMuc2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuUEVQUEVSSV9UT0tFTl9IRUFERVIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvblRva2VuXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gT2xkIGNvZGVcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc3QgdXNlclNldHRpbmdDb29raWUgPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KFxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5QRVBQRVJJX1RPS0VOX0NPT0tJRVxuICAgICAgICAgICAgICAgICAgICAvLyApO1xuICAgICAgICAgICAgICAgICAgICAvLyBjb25zdCB3ZWJBcGlUb2tlbiA9IEpTT04ucGFyc2UodXNlclNldHRpbmdDb29raWUpLnZhbHVlc1xuICAgICAgICAgICAgICAgICAgICAvLyAgICAgLml0ZW1zW3RoaXMuV0FQSV9UT0tFTl9LRVldO1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiAod2ViQXBpVG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIGh0dHBPcHRpb25zLmhlYWRlcnMgPSBodHRwT3B0aW9ucy5oZWFkZXJzLnNldChcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICB0aGlzLlBFUFBFUklfVE9LRU5fSEVBREVSLFxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIHdlYkFwaVRva2VuXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICApO1xuICAgICAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgIC8vIERvIG5vdGhpbmcuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGh0dHBPcHRpb25zO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RGVmYXVsdEhlYWRlck9wdGlvbnModXJsOiBzdHJpbmcsIGh0dHBPcHRpb25zOiBhbnkgPSB7fSk6IGFueSB7XG4gICAgICAgIGlmICghaHR0cE9wdGlvbnMuaGVhZGVycykge1xuICAgICAgICAgICAgaHR0cE9wdGlvbnMuaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWRkIGNvbnRlbnQgdHlwZVxuICAgICAgICBpZiAoIWh0dHBPcHRpb25zLmhlYWRlcnMuaGFzKCdDb250ZW50LVR5cGUnKSkge1xuICAgICAgICAgICAgaHR0cE9wdGlvbnMuaGVhZGVycyA9IGh0dHBPcHRpb25zLmhlYWRlcnMuc2V0KFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnLFxuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGh0dHBPcHRpb25zID0gdGhpcy5hZGRBdXRob3JpemF0aW9uVG9rZW4oaHR0cE9wdGlvbnMpO1xuICAgICAgICBodHRwT3B0aW9ucyA9IHRoaXMuYWRkV2ViQXBpVG9rZW4odXJsLCBodHRwT3B0aW9ucyk7XG5cbiAgICAgICAgcmV0dXJuIGh0dHBPcHRpb25zO1xuICAgIH1cblxuICAgIC8vIGdldFRleHRGaWxlKGZpbGVuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyAgICAgLy8gVGhlIE9ic2VydmFibGUgcmV0dXJuZWQgYnkgZ2V0KCkgaXMgb2YgdHlwZSBPYnNlcnZhYmxlPHN0cmluZz5cbiAgICAvLyAgICAgLy8gYmVjYXVzZSBhIHRleHQgcmVzcG9uc2Ugd2FzIHNwZWNpZmllZC5cbiAgICAvLyAgICAgLy8gVGhlcmUncyBubyBuZWVkIHRvIHBhc3MgYSA8c3RyaW5nPiB0eXBlIHBhcmFtZXRlciB0byBnZXQoKS5cbiAgICAvLyAgICAgLy8gcmV0dXJuIHRoaXMuaHR0cC5nZXQoZmlsZW5hbWUsIHtyZXNwb25zZVR5cGU6ICd0ZXh0J30pXG4gICAgLy8gICAgIC8vICAgICAucGlwZShcbiAgICAvLyAgICAgLy8gICAgICAgICB0YXAoIC8vIExvZyB0aGUgcmVzdWx0IG9yIGVycm9yXG4gICAgLy8gICAgIC8vICAgICAgICAgZGF0YSA9PiB0aGlzLmxvZyhmaWxlbmFtZSwgZGF0YSksXG4gICAgLy8gICAgIC8vICAgICAgICAgZXJyb3IgPT4gdGhpcy5sb2dFcnJvcihmaWxlbmFtZSwgZXJyb3IpXG4gICAgLy8gICAgIC8vICAgICAgICAgKVxuICAgIC8vICAgICAvLyApO1xuICAgIC8vIH1cblxuICAgIGdldEh0dHBDYWxsKHVybDogc3RyaW5nLCBodHRwT3B0aW9uczogYW55ID0ge30pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBodHRwT3B0aW9ucyA9IHRoaXMuc2V0RGVmYXVsdEhlYWRlck9wdGlvbnModXJsLCBodHRwT3B0aW9ucyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgLmdldCh1cmwsIGh0dHBPcHRpb25zKVxuICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yLmJpbmQodGhpcykpKTtcbiAgICAgICAgLy8gICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIC8vICAgICAgICAgKHJlcykgPT4gY29uc29sZS5sb2coJycpLFxuICAgICAgICAvLyAgICAgICAgIChlcnJvcikgPT4gY29uc29sZS5sb2coJycpLFxuICAgICAgICAvLyAgICAgICAgICgpID0+IHt9XG4gICAgICAgIC8vICk7XG4gICAgfVxuXG4gICAgcG9zdEh0dHBDYWxsKFxuICAgICAgICB1cmw6IHN0cmluZyxcbiAgICAgICAgYm9keTogYW55IHwgbnVsbCxcbiAgICAgICAgaHR0cE9wdGlvbnM6IGFueSA9IHt9XG4gICAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgaHR0cE9wdGlvbnMgPSB0aGlzLnNldERlZmF1bHRIZWFkZXJPcHRpb25zKHVybCwgaHR0cE9wdGlvbnMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAgIC5wb3N0KHVybCwgYm9keSwgaHR0cE9wdGlvbnMpXG4gICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IuYmluZCh0aGlzKSkpO1xuICAgICAgICAvLyAgICAgLnN1YnNjcmliZShcbiAgICAgICAgLy8gICAgICAgICAocmVzKSA9PiBjb25zb2xlLmxvZygnJyksXG4gICAgICAgIC8vICAgICAgICAgKGVycm9yKSA9PiBjb25zb2xlLmxvZygnJyksXG4gICAgICAgIC8vICAgICAgICAgKCkgPT4ge31cbiAgICAgICAgLy8gKTtcbiAgICB9XG5cbiAgICBnZXRXYXBpQXBpQ2FsbCh1cmw6IHN0cmluZywgaHR0cE9wdGlvbnM6IGFueSA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3Qgd2FwaUJhc2VVcmwgPSB0aGlzLnNlc3Npb25TZXJ2aWNlLmdldFdhcGlCYXNlVXJsKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEh0dHBDYWxsKGAke3dhcGlCYXNlVXJsfSR7dXJsfWAsIGh0dHBPcHRpb25zKTtcbiAgICB9XG5cbiAgICBwb3N0V2FwaUFwaUNhbGwoXG4gICAgICAgIHVybDogc3RyaW5nLFxuICAgICAgICBib2R5OiBhbnkgfCBudWxsLFxuICAgICAgICBodHRwT3B0aW9uczogYW55ID0ge31cbiAgICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCB3YXBpQmFzZVVybCA9IHRoaXMuc2Vzc2lvblNlcnZpY2UuZ2V0V2FwaUJhc2VVcmwoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdEh0dHBDYWxsKGAke3dhcGlCYXNlVXJsfSR7dXJsfWAsIGJvZHksIGh0dHBPcHRpb25zKTtcbiAgICB9XG5cbiAgICBnZXRQYXBpQXBpQ2FsbCh1cmw6IHN0cmluZywgaHR0cE9wdGlvbnM6IGFueSA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3QgcGFwaUJhc2VVcmwgPSB0aGlzLnNlc3Npb25TZXJ2aWNlLmdldFBhcGlCYXNlVXJsKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEh0dHBDYWxsKGAke3BhcGlCYXNlVXJsfSR7dXJsfWAsIGh0dHBPcHRpb25zKTtcbiAgICB9XG5cbiAgICBwb3N0UGFwaUFwaUNhbGwoXG4gICAgICAgIHVybDogc3RyaW5nLFxuICAgICAgICBib2R5OiBhbnkgfCBudWxsLFxuICAgICAgICBodHRwT3B0aW9uczogYW55ID0ge31cbiAgICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBwYXBpQmFzZVVybCA9IHRoaXMuc2Vzc2lvblNlcnZpY2UuZ2V0UGFwaUJhc2VVcmwoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdEh0dHBDYWxsKGAke3BhcGlCYXNlVXJsfSR7dXJsfWAsIGJvZHksIGh0dHBPcHRpb25zKTtcbiAgICB9XG5cbiAgICAvLyBnZXRBcGlDYWxsKHVybDogc3RyaW5nLCBodHRwT3B0aW9uczogYW55ID0ge30pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIC8vICAgICBjb25zdCBhcGlCYXNlVXJsID0gdGhpcy5zZXNzaW9uU2VydmljZS5nZXRBcGlCYXNlVXJsKCk7XG4gICAgLy8gICAgIHJldHVybiB0aGlzLmdldEh0dHBDYWxsKGAke2FwaUJhc2VVcmx9JHt1cmx9YCwgaHR0cE9wdGlvbnMpO1xuICAgIC8vIH1cblxuICAgIC8vIHBvc3RBcGlDYWxsKFxuICAgIC8vICAgICB1cmw6IHN0cmluZyxcbiAgICAvLyAgICAgYm9keTogYW55IHwgbnVsbCxcbiAgICAvLyAgICAgaHR0cE9wdGlvbnM6IGFueSA9IHt9XG4gICAgLy8gKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAvLyAgICAgY29uc3QgYXBpQmFzZVVybCA9IHRoaXMuc2Vzc2lvblNlcnZpY2UuZ2V0QXBpQmFzZVVybCgpO1xuICAgIC8vICAgICByZXR1cm4gdGhpcy5wb3N0SHR0cENhbGwoYCR7YXBpQmFzZVVybH0ke3VybH1gLCBib2R5LCBodHRwT3B0aW9ucyk7XG4gICAgLy8gfVxufVxuIl19