@wavemaker/app-ng-runtime 11.13.0-rc.6255 → 11.14.0-rc.226

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 (1024) hide show
  1. package/build-task/bundles/index.umd.js +34 -5
  2. package/build-task/esm2022/basic/anchor/anchor.build.mjs +15 -0
  3. package/build-task/esm2022/basic/audio/audio.build.mjs +10 -0
  4. package/build-task/esm2022/basic/html/html.build.mjs +15 -0
  5. package/build-task/esm2022/basic/icon/icon.build.mjs +10 -0
  6. package/build-task/esm2022/basic/iframe/iframe.build.mjs +10 -0
  7. package/build-task/esm2022/basic/label/label.build.mjs +25 -0
  8. package/build-task/esm2022/basic/picture/picture.build.mjs +14 -0
  9. package/build-task/esm2022/basic/spinner/spinner.build.mjs +15 -0
  10. package/build-task/esm2022/basic/video/video.build.mjs +10 -0
  11. package/build-task/esm2022/data/form/form-field/form-field.build.mjs +8 -3
  12. package/build-task/esm2022/data/form/form.build.mjs +8 -1
  13. package/build-task/esm2022/data/table/table-column/table-column.build.mjs +14 -3
  14. package/build-task/esm2022/input/default/checkbox/checkbox.build.mjs +2 -2
  15. package/build-task/esm2022/page/page-content/page-content.build.mjs +8 -2
  16. package/build-task/esm2022/public_api.mjs +10 -10
  17. package/build-task/fesm2022/index.mjs +36 -7
  18. package/build-task/fesm2022/index.mjs.map +1 -1
  19. package/build-task/package.json +3 -6
  20. package/build-task/public_api.d.ts +9 -9
  21. package/components/advanced/carousel/bundles/index.umd.js +33 -38
  22. package/components/advanced/carousel/esm2022/carousel-template/carousel-template.directive.mjs +16 -16
  23. package/components/advanced/carousel/esm2022/carousel.directive.mjs +19 -24
  24. package/components/advanced/carousel/fesm2022/index.mjs +34 -39
  25. package/components/advanced/carousel/fesm2022/index.mjs.map +1 -1
  26. package/components/advanced/carousel/package.json +0 -3
  27. package/components/advanced/custom/bundles/index.umd.js +48 -48
  28. package/components/advanced/custom/custom-widget-container/custom-widget-container.directive.d.ts +1 -1
  29. package/components/advanced/custom/esm2022/custom-widget-container/custom-widget-container.directive.mjs +31 -31
  30. package/components/advanced/custom/esm2022/custom-widget.directive.mjs +15 -15
  31. package/components/advanced/custom/fesm2022/index.mjs +45 -45
  32. package/components/advanced/custom/fesm2022/index.mjs.map +1 -1
  33. package/components/advanced/custom/package.json +0 -3
  34. package/components/advanced/login/bundles/index.umd.js +33 -53
  35. package/components/advanced/login/esm2022/login.component.mjs +26 -47
  36. package/components/advanced/login/fesm2022/index.mjs +27 -47
  37. package/components/advanced/login/fesm2022/index.mjs.map +1 -1
  38. package/components/advanced/login/login.component.d.ts +1 -1
  39. package/components/advanced/login/package.json +0 -3
  40. package/components/advanced/marquee/bundles/index.umd.js +19 -19
  41. package/components/advanced/marquee/esm2022/marquee.directive.mjs +20 -20
  42. package/components/advanced/marquee/fesm2022/index.mjs +20 -20
  43. package/components/advanced/marquee/fesm2022/index.mjs.map +1 -1
  44. package/components/advanced/marquee/package.json +0 -3
  45. package/components/base/bundles/index.umd.js +4272 -4243
  46. package/components/base/esm2022/pipes/custom-pipes.mjs +14 -12
  47. package/components/base/esm2022/pipes/wm-pipe.mjs +3 -3
  48. package/components/base/esm2022/public_api.mjs +1 -2
  49. package/components/base/esm2022/widgets/common/container/container.directive.mjs +154 -1
  50. package/components/base/esm2022/widgets/common/container/container.props.mjs +7 -2
  51. package/components/base/esm2022/widgets/common/redraw/redrawable.directive.mjs +1 -1
  52. package/components/base/fesm2022/index.mjs +4280 -4251
  53. package/components/base/fesm2022/index.mjs.map +1 -1
  54. package/components/base/package.json +2 -2
  55. package/components/base/pipes/custom-pipes.d.ts +4 -2
  56. package/components/base/pipes/wm-pipe.d.ts +1 -1
  57. package/components/base/public_api.d.ts +0 -1
  58. package/components/base/widgets/common/container/container.directive.d.ts +9 -0
  59. package/components/base/widgets/common/pull-to-refresh/pull-to-refresh.d.ts +0 -2
  60. package/components/basic/anchor/bundles/index.umd.js +192 -0
  61. package/components/basic/anchor/esm2022/anchor.component.mjs +143 -0
  62. package/components/basic/anchor/esm2022/anchor.props.mjs +27 -0
  63. package/components/basic/anchor/esm2022/index.mjs +5 -0
  64. package/components/basic/anchor/esm2022/public_api.mjs +2 -0
  65. package/components/basic/anchor/fesm2022/index.mjs +175 -0
  66. package/components/basic/anchor/fesm2022/index.mjs.map +1 -0
  67. package/components/basic/{progress → anchor}/index.d.ts +1 -1
  68. package/components/basic/{default → anchor}/package.json +1 -4
  69. package/components/basic/anchor/public_api.d.ts +1 -0
  70. package/components/basic/audio/bundles/index.umd.js +83 -0
  71. package/components/basic/audio/esm2022/audio.component.mjs +41 -0
  72. package/components/basic/audio/esm2022/audio.props.mjs +19 -0
  73. package/components/{input/epoch → basic/audio}/esm2022/index.mjs +1 -1
  74. package/components/basic/audio/esm2022/public_api.mjs +2 -0
  75. package/components/basic/audio/fesm2022/index.mjs +65 -0
  76. package/components/basic/audio/fesm2022/index.mjs.map +1 -0
  77. package/components/{input/epoch → basic/audio}/index.d.ts +1 -1
  78. package/components/{input/default → basic/audio}/package.json +2 -5
  79. package/components/basic/audio/public_api.d.ts +1 -0
  80. package/components/basic/html/bundles/index.umd.js +110 -0
  81. package/components/basic/html/esm2022/html.directive.mjs +76 -0
  82. package/components/basic/html/esm2022/html.props.mjs +12 -0
  83. package/components/basic/html/esm2022/index.mjs +5 -0
  84. package/components/basic/html/esm2022/public_api.mjs +2 -0
  85. package/components/basic/html/fesm2022/index.mjs +93 -0
  86. package/components/basic/html/fesm2022/index.mjs.map +1 -0
  87. package/components/basic/{default → html}/index.d.ts +1 -1
  88. package/components/{input/epoch → basic/html}/package.json +1 -4
  89. package/components/basic/html/public_api.d.ts +1 -0
  90. package/components/basic/icon/bundles/index.umd.js +80 -0
  91. package/components/basic/icon/esm2022/icon.component.mjs +38 -0
  92. package/components/basic/icon/esm2022/icon.props.mjs +19 -0
  93. package/components/basic/icon/esm2022/index.mjs +5 -0
  94. package/components/basic/icon/esm2022/public_api.mjs +2 -0
  95. package/components/basic/icon/fesm2022/index.mjs +62 -0
  96. package/components/basic/icon/fesm2022/index.mjs.map +1 -0
  97. package/components/{input/default → basic/icon}/index.d.ts +1 -1
  98. package/components/basic/{progress → icon}/package.json +1 -4
  99. package/components/basic/icon/public_api.d.ts +1 -0
  100. package/components/basic/iframe/.npmignore +2 -0
  101. package/components/basic/iframe/bundles/index.umd.js +101 -0
  102. package/components/basic/iframe/esm2022/iframe.component.mjs +65 -0
  103. package/components/basic/iframe/esm2022/iframe.props.mjs +15 -0
  104. package/components/basic/iframe/esm2022/index.mjs +5 -0
  105. package/components/basic/iframe/esm2022/public_api.mjs +2 -0
  106. package/components/basic/iframe/fesm2022/index.mjs +84 -0
  107. package/components/basic/iframe/fesm2022/index.mjs.map +1 -0
  108. package/components/basic/iframe/index.d.ts +5 -0
  109. package/components/basic/iframe/package.json +20 -0
  110. package/components/basic/iframe/public_api.d.ts +1 -0
  111. package/components/basic/label/.npmignore +2 -0
  112. package/components/basic/label/bundles/index.umd.js +109 -0
  113. package/components/basic/label/esm2022/index.mjs +5 -0
  114. package/components/basic/label/esm2022/label.directive.mjs +71 -0
  115. package/components/basic/label/esm2022/label.props.mjs +17 -0
  116. package/components/basic/label/esm2022/public_api.mjs +2 -0
  117. package/components/basic/label/fesm2022/index.mjs +93 -0
  118. package/components/basic/label/fesm2022/index.mjs.map +1 -0
  119. package/components/basic/label/index.d.ts +5 -0
  120. package/components/basic/{default/label → label}/label.directive.d.ts +1 -1
  121. package/components/basic/label/package.json +20 -0
  122. package/components/basic/label/public_api.d.ts +1 -0
  123. package/components/basic/picture/.npmignore +2 -0
  124. package/components/basic/picture/bundles/index.umd.js +138 -0
  125. package/components/basic/{default → picture}/esm2022/index.mjs +1 -1
  126. package/components/basic/picture/esm2022/picture.directive.mjs +93 -0
  127. package/components/basic/picture/esm2022/picture.props.mjs +23 -0
  128. package/components/basic/picture/esm2022/public_api.mjs +2 -0
  129. package/components/basic/picture/fesm2022/index.mjs +121 -0
  130. package/components/basic/picture/fesm2022/index.mjs.map +1 -0
  131. package/components/basic/picture/index.d.ts +5 -0
  132. package/components/basic/picture/package.json +20 -0
  133. package/components/basic/picture/public_api.d.ts +1 -0
  134. package/components/basic/progress/progress-bar/.npmignore +2 -0
  135. package/components/basic/progress/progress-bar/bundles/index.umd.js +170 -0
  136. package/components/basic/progress/progress-bar/esm2022/index.mjs +5 -0
  137. package/components/basic/progress/progress-bar/esm2022/progress-bar.component.mjs +130 -0
  138. package/components/basic/progress/{esm2022/progress-bar → progress-bar/esm2022}/progress-bar.props.mjs +1 -1
  139. package/components/basic/progress/progress-bar/esm2022/public_api.mjs +2 -0
  140. package/components/basic/progress/progress-bar/fesm2022/index.mjs +154 -0
  141. package/components/basic/progress/progress-bar/fesm2022/index.mjs.map +1 -0
  142. package/components/basic/progress/progress-bar/index.d.ts +5 -0
  143. package/components/basic/progress/progress-bar/package.json +20 -0
  144. package/components/basic/progress/progress-bar/public_api.d.ts +1 -0
  145. package/components/basic/progress/progress-circle/.npmignore +2 -0
  146. package/components/basic/progress/progress-circle/bundles/index.umd.js +161 -0
  147. package/components/basic/progress/progress-circle/esm2022/index.mjs +5 -0
  148. package/components/basic/progress/progress-circle/esm2022/progress-circle.component.mjs +120 -0
  149. package/components/basic/progress/{esm2022/progress-circle → progress-circle/esm2022}/progress-circle.props.mjs +1 -1
  150. package/components/basic/progress/progress-circle/esm2022/public_api.mjs +2 -0
  151. package/components/basic/progress/progress-circle/fesm2022/index.mjs +145 -0
  152. package/components/basic/progress/progress-circle/fesm2022/index.mjs.map +1 -0
  153. package/components/basic/progress/progress-circle/index.d.ts +5 -0
  154. package/components/basic/progress/progress-circle/package.json +20 -0
  155. package/components/basic/progress/progress-circle/public_api.d.ts +1 -0
  156. package/components/basic/progress/progress-utils/.npmignore +2 -0
  157. package/components/basic/progress/progress-utils/bundles/index.umd.js +35 -0
  158. package/components/basic/progress/progress-utils/esm2022/index.mjs +5 -0
  159. package/components/basic/progress/progress-utils/esm2022/progress-utils.mjs +25 -0
  160. package/components/basic/progress/progress-utils/esm2022/public_api.mjs +2 -0
  161. package/components/basic/progress/progress-utils/fesm2022/index.mjs +32 -0
  162. package/components/basic/progress/progress-utils/fesm2022/index.mjs.map +1 -0
  163. package/components/basic/progress/progress-utils/index.d.ts +5 -0
  164. package/components/basic/progress/progress-utils/package.json +20 -0
  165. package/components/basic/progress/progress-utils/public_api.d.ts +1 -0
  166. package/components/basic/rich-text-editor/bundles/index.umd.js +23 -40
  167. package/components/basic/rich-text-editor/esm2022/rich-text-editor.component.mjs +19 -38
  168. package/components/basic/rich-text-editor/fesm2022/index.mjs +21 -39
  169. package/components/basic/rich-text-editor/fesm2022/index.mjs.map +1 -1
  170. package/components/basic/rich-text-editor/package.json +0 -3
  171. package/components/basic/rich-text-editor/rich-text-editor.component.d.ts +1 -1
  172. package/components/basic/search/bundles/index.umd.js +109 -313
  173. package/components/basic/search/esm2022/scrollable.directive.mjs +13 -14
  174. package/components/basic/search/esm2022/search.component.mjs +40 -246
  175. package/components/basic/search/fesm2022/index.mjs +52 -256
  176. package/components/basic/search/fesm2022/index.mjs.map +1 -1
  177. package/components/basic/search/package.json +0 -3
  178. package/components/basic/search/scrollable.directive.d.ts +2 -3
  179. package/components/basic/search/search.component.d.ts +1 -1
  180. package/components/basic/spinner/.npmignore +2 -0
  181. package/components/basic/spinner/bundles/index.umd.js +118 -0
  182. package/components/{input/default → basic/spinner}/esm2022/index.mjs +1 -1
  183. package/components/basic/spinner/esm2022/public_api.mjs +2 -0
  184. package/components/basic/spinner/esm2022/spinner.component.mjs +79 -0
  185. package/components/basic/spinner/esm2022/spinner.props.mjs +20 -0
  186. package/components/basic/spinner/fesm2022/index.mjs +103 -0
  187. package/components/basic/spinner/fesm2022/index.mjs.map +1 -0
  188. package/components/basic/spinner/index.d.ts +5 -0
  189. package/components/basic/spinner/package.json +20 -0
  190. package/components/basic/spinner/public_api.d.ts +1 -0
  191. package/components/basic/tree/bundles/index.umd.js +34 -38
  192. package/components/basic/tree/esm2022/tree.component.mjs +31 -36
  193. package/components/basic/tree/fesm2022/index.mjs +32 -36
  194. package/components/basic/tree/fesm2022/index.mjs.map +1 -1
  195. package/components/basic/tree/package.json +0 -3
  196. package/components/basic/video/.npmignore +2 -0
  197. package/components/basic/video/bundles/index.umd.js +116 -0
  198. package/components/basic/video/esm2022/index.mjs +5 -0
  199. package/components/basic/video/esm2022/public_api.mjs +2 -0
  200. package/components/basic/video/esm2022/video.component.mjs +70 -0
  201. package/components/basic/video/esm2022/video.props.mjs +24 -0
  202. package/components/basic/video/fesm2022/index.mjs +99 -0
  203. package/components/basic/video/fesm2022/index.mjs.map +1 -0
  204. package/components/basic/video/index.d.ts +5 -0
  205. package/components/basic/video/package.json +20 -0
  206. package/components/basic/video/public_api.d.ts +1 -0
  207. package/components/chart/bundles/index.umd.js +22 -75
  208. package/components/chart/esm2022/chart.component.mjs +20 -74
  209. package/components/chart/fesm2022/index.mjs +21 -74
  210. package/components/chart/fesm2022/index.mjs.map +1 -1
  211. package/components/chart/package.json +0 -3
  212. package/components/containers/accordion/bundles/index.umd.js +45 -100
  213. package/components/containers/accordion/esm2022/accordion-pane/accordion-pane.component.mjs +19 -70
  214. package/components/containers/accordion/esm2022/accordion.directive.mjs +24 -29
  215. package/components/containers/accordion/fesm2022/index.mjs +43 -98
  216. package/components/containers/accordion/fesm2022/index.mjs.map +1 -1
  217. package/components/containers/accordion/package.json +0 -3
  218. package/components/containers/layout-grid/bundles/index.umd.js +60 -60
  219. package/components/containers/layout-grid/esm2022/layout-grid-column/layout-grid-column.directive.mjs +23 -23
  220. package/components/containers/layout-grid/esm2022/layout-grid-row/layout-grid-row.directive.mjs +20 -20
  221. package/components/containers/layout-grid/esm2022/layout-grid.directive.mjs +20 -20
  222. package/components/containers/layout-grid/fesm2022/index.mjs +61 -61
  223. package/components/containers/layout-grid/fesm2022/index.mjs.map +1 -1
  224. package/components/containers/layout-grid/package.json +0 -3
  225. package/components/containers/linear-layout/bundles/index.umd.js +38 -38
  226. package/components/containers/linear-layout/esm2022/linear-layout-item/linear-layout-item.directive.mjs +20 -20
  227. package/components/containers/linear-layout/esm2022/linear-layout.directive.mjs +20 -20
  228. package/components/containers/linear-layout/fesm2022/index.mjs +39 -39
  229. package/components/containers/linear-layout/fesm2022/index.mjs.map +1 -1
  230. package/components/containers/linear-layout/package.json +0 -3
  231. package/components/containers/panel/bundles/index.umd.js +62 -223
  232. package/components/containers/panel/esm2022/panel.component.mjs +29 -190
  233. package/components/containers/panel/fesm2022/index.mjs +29 -190
  234. package/components/containers/panel/fesm2022/index.mjs.map +1 -1
  235. package/components/containers/panel/package.json +0 -3
  236. package/components/containers/tabs/bundles/index.umd.js +95 -204
  237. package/components/containers/tabs/esm2022/tab-pane/tab-pane.component.mjs +34 -51
  238. package/components/containers/tabs/esm2022/tabs.component.mjs +29 -123
  239. package/components/containers/tabs/fesm2022/index.mjs +61 -170
  240. package/components/containers/tabs/fesm2022/index.mjs.map +1 -1
  241. package/components/containers/tabs/package.json +0 -3
  242. package/components/containers/tabs/tab-pane/tab-pane.component.d.ts +3 -4
  243. package/components/containers/tile/bundles/index.umd.js +19 -19
  244. package/components/containers/tile/esm2022/tile.directive.mjs +20 -20
  245. package/components/containers/tile/fesm2022/index.mjs +20 -20
  246. package/components/containers/tile/fesm2022/index.mjs.map +1 -1
  247. package/components/containers/tile/package.json +0 -3
  248. package/components/containers/wizard/bundles/index.umd.js +119 -302
  249. package/components/containers/wizard/esm2022/wizard-action/wizard-action.directive.mjs +21 -21
  250. package/components/containers/wizard/esm2022/wizard-step/wizard-step.component.mjs +32 -45
  251. package/components/containers/wizard/esm2022/wizard.component.mjs +30 -201
  252. package/components/containers/wizard/fesm2022/index.mjs +81 -264
  253. package/components/containers/wizard/fesm2022/index.mjs.map +1 -1
  254. package/components/containers/wizard/package.json +0 -3
  255. package/components/containers/wizard/wizard.component.d.ts +1 -1
  256. package/components/data/card/bundles/index.umd.js +108 -208
  257. package/components/data/card/esm2022/card-actions/card-actions.directive.mjs +15 -15
  258. package/components/data/card/esm2022/card-content/card-content.component.mjs +19 -34
  259. package/components/data/card/esm2022/card-footer/card-footer.directive.mjs +15 -15
  260. package/components/data/card/esm2022/card.component.mjs +21 -107
  261. package/components/data/card/fesm2022/index.mjs +67 -167
  262. package/components/data/card/fesm2022/index.mjs.map +1 -1
  263. package/components/data/card/package.json +0 -3
  264. package/components/data/form/bundles/index.umd.js +287 -467
  265. package/components/data/form/esm2022/form-action/form-action.directive.mjs +22 -22
  266. package/components/data/form/esm2022/form-field/form-field.directive.mjs +80 -91
  267. package/components/data/form/esm2022/form-widget.directive.mjs +31 -31
  268. package/components/data/form/esm2022/form.component.mjs +88 -251
  269. package/components/data/form/esm2022/form.props.mjs +1 -1
  270. package/components/data/form/esm2022/live-actions/dependson.directive.mjs +19 -24
  271. package/components/data/form/esm2022/live-actions/live-actions.directive.mjs +15 -15
  272. package/components/data/form/esm2022/live-filter/live-filter.directive.mjs +15 -15
  273. package/components/data/form/esm2022/live-form/live-form.directive.mjs +23 -25
  274. package/components/data/form/fesm2022/index.mjs +288 -468
  275. package/components/data/form/fesm2022/index.mjs.map +1 -1
  276. package/components/data/form/package.json +0 -3
  277. package/components/data/list/bundles/index.umd.js +80 -360
  278. package/components/data/list/esm2022/list-item.directive.mjs +27 -34
  279. package/components/data/list/esm2022/list.animator.mjs +1 -1
  280. package/components/data/list/esm2022/list.component.mjs +55 -330
  281. package/components/data/list/esm2022/list.props.mjs +1 -1
  282. package/components/data/list/fesm2022/index.mjs +79 -358
  283. package/components/data/list/fesm2022/index.mjs.map +1 -1
  284. package/components/data/list/list-item.directive.d.ts +3 -3
  285. package/components/data/list/list.component.d.ts +2 -4
  286. package/components/data/list/package.json +0 -3
  287. package/components/data/live-table/bundles/index.umd.js +28 -39
  288. package/components/data/live-table/esm2022/live-table.component.mjs +25 -37
  289. package/components/data/live-table/fesm2022/index.mjs +26 -37
  290. package/components/data/live-table/fesm2022/index.mjs.map +1 -1
  291. package/components/data/live-table/package.json +0 -3
  292. package/components/data/pagination/bundles/index.umd.js +33 -505
  293. package/components/data/pagination/esm2022/pagination.component.mjs +33 -507
  294. package/components/data/pagination/esm2022/pagination.props.mjs +1 -1
  295. package/components/data/pagination/fesm2022/index.mjs +32 -505
  296. package/components/data/pagination/fesm2022/index.mjs.map +1 -1
  297. package/components/data/pagination/package.json +0 -3
  298. package/components/data/pagination/pagination.component.d.ts +1 -1
  299. package/components/data/table/bundles/index.umd.js +310 -457
  300. package/components/data/table/esm2022/table-action/table-action.directive.mjs +22 -22
  301. package/components/data/table/esm2022/table-column/table-column.directive.mjs +50 -71
  302. package/components/data/table/esm2022/table-column/table-column.props.mjs +1 -1
  303. package/components/data/table/esm2022/table-column-group/table-column-group.directive.mjs +26 -26
  304. package/components/data/table/esm2022/table-cud.directive.mjs +15 -15
  305. package/components/data/table/esm2022/table-filter.directive.mjs +16 -16
  306. package/components/data/table/esm2022/table-row/table-row.directive.mjs +24 -24
  307. package/components/data/table/esm2022/table-row-action/table-row-action.directive.mjs +29 -29
  308. package/components/data/table/esm2022/table.component.mjs +135 -263
  309. package/components/data/table/esm2022/table.props.mjs +2 -1
  310. package/components/data/table/fesm2022/index.mjs +312 -459
  311. package/components/data/table/fesm2022/index.mjs.map +1 -1
  312. package/components/data/table/package.json +0 -3
  313. package/components/data/table/table-column/table-column.directive.d.ts +1 -1
  314. package/components/data/table/table.component.d.ts +3 -0
  315. package/components/dialogs/alert-dialog/bundles/index.umd.js +50 -79
  316. package/components/dialogs/alert-dialog/esm2022/alert-dialog.component.mjs +32 -62
  317. package/components/dialogs/alert-dialog/fesm2022/index.mjs +32 -61
  318. package/components/dialogs/alert-dialog/fesm2022/index.mjs.map +1 -1
  319. package/components/dialogs/alert-dialog/package.json +0 -3
  320. package/components/dialogs/confirm-dialog/bundles/index.umd.js +36 -72
  321. package/components/dialogs/confirm-dialog/esm2022/confirm-dialog.component.mjs +34 -71
  322. package/components/dialogs/confirm-dialog/fesm2022/index.mjs +35 -71
  323. package/components/dialogs/confirm-dialog/fesm2022/index.mjs.map +1 -1
  324. package/components/dialogs/confirm-dialog/package.json +0 -3
  325. package/components/dialogs/default/bundles/index.umd.js +85 -232
  326. package/components/dialogs/default/esm2022/base-dialog.mjs +14 -14
  327. package/components/dialogs/default/esm2022/dialog-body/dialog-body.directive.mjs +16 -18
  328. package/components/dialogs/default/esm2022/dialog-footer/dialog-footer.directive.mjs +20 -20
  329. package/components/dialogs/default/esm2022/dialog-header/dialog-header.component.mjs +34 -179
  330. package/components/dialogs/default/fesm2022/index.mjs +80 -227
  331. package/components/dialogs/default/fesm2022/index.mjs.map +1 -1
  332. package/components/dialogs/default/package.json +0 -3
  333. package/components/dialogs/design-dialog/bundles/index.umd.js +52 -108
  334. package/components/dialogs/design-dialog/esm2022/dialog.component.mjs +50 -107
  335. package/components/dialogs/design-dialog/fesm2022/index.mjs +51 -107
  336. package/components/dialogs/design-dialog/fesm2022/index.mjs.map +1 -1
  337. package/components/dialogs/design-dialog/package.json +0 -3
  338. package/components/dialogs/iframe-dialog/bundles/index.umd.js +33 -81
  339. package/components/dialogs/iframe-dialog/esm2022/iframe-dialog.component.mjs +32 -82
  340. package/components/dialogs/iframe-dialog/fesm2022/index.mjs +33 -82
  341. package/components/dialogs/iframe-dialog/fesm2022/index.mjs.map +1 -1
  342. package/components/dialogs/iframe-dialog/package.json +0 -3
  343. package/components/dialogs/login-dialog/bundles/index.umd.js +22 -29
  344. package/components/dialogs/login-dialog/esm2022/login-dialog.directive.mjs +23 -30
  345. package/components/dialogs/login-dialog/fesm2022/index.mjs +23 -30
  346. package/components/dialogs/login-dialog/fesm2022/index.mjs.map +1 -1
  347. package/components/dialogs/login-dialog/package.json +0 -3
  348. package/components/dialogs/partial-dialog/bundles/index.umd.js +39 -85
  349. package/components/dialogs/partial-dialog/esm2022/partial-dialog.component.mjs +38 -85
  350. package/components/dialogs/partial-dialog/fesm2022/index.mjs +39 -85
  351. package/components/dialogs/partial-dialog/fesm2022/index.mjs.map +1 -1
  352. package/components/dialogs/partial-dialog/package.json +0 -3
  353. package/components/input/base-form/.npmignore +2 -0
  354. package/components/input/base-form/bundles/index.umd.js +133 -0
  355. package/components/input/base-form/esm2022/base-form.component.mjs +110 -0
  356. package/components/input/base-form/esm2022/index.mjs +5 -0
  357. package/components/input/base-form/esm2022/public_api.mjs +2 -0
  358. package/components/input/base-form/fesm2022/index.mjs +117 -0
  359. package/components/input/base-form/fesm2022/index.mjs.map +1 -0
  360. package/components/input/base-form/index.d.ts +5 -0
  361. package/components/input/base-form/package.json +20 -0
  362. package/components/input/base-form/public_api.d.ts +1 -0
  363. package/components/input/base-form-custom/.npmignore +2 -0
  364. package/components/input/{default → base-form-custom}/base-form-custom.component.d.ts +1 -1
  365. package/components/input/base-form-custom/bundles/index.umd.js +118 -0
  366. package/components/input/base-form-custom/esm2022/base-form-custom.component.mjs +94 -0
  367. package/components/input/base-form-custom/esm2022/index.mjs +5 -0
  368. package/components/input/base-form-custom/esm2022/public_api.mjs +2 -0
  369. package/components/input/base-form-custom/fesm2022/index.mjs +101 -0
  370. package/components/input/base-form-custom/fesm2022/index.mjs.map +1 -0
  371. package/components/input/base-form-custom/index.d.ts +5 -0
  372. package/components/input/base-form-custom/package.json +20 -0
  373. package/components/input/base-form-custom/public_api.d.ts +1 -0
  374. package/components/input/button/.npmignore +2 -0
  375. package/components/input/button/bundles/index.umd.js +98 -0
  376. package/components/input/button/esm2022/button.component.mjs +50 -0
  377. package/components/input/button/esm2022/button.props.mjs +26 -0
  378. package/components/input/button/esm2022/index.mjs +5 -0
  379. package/components/input/button/esm2022/public_api.mjs +2 -0
  380. package/components/input/button/fesm2022/index.mjs +81 -0
  381. package/components/input/button/fesm2022/index.mjs.map +1 -0
  382. package/components/input/button/index.d.ts +5 -0
  383. package/components/input/button/package.json +20 -0
  384. package/components/input/button/public_api.d.ts +1 -0
  385. package/components/input/button-group/.npmignore +2 -0
  386. package/components/input/button-group/bundles/index.umd.js +80 -0
  387. package/components/input/button-group/esm2022/button-group.directive.mjs +47 -0
  388. package/components/input/button-group/esm2022/button-group.props.mjs +10 -0
  389. package/components/input/button-group/esm2022/index.mjs +5 -0
  390. package/components/input/button-group/esm2022/public_api.mjs +2 -0
  391. package/components/input/button-group/fesm2022/index.mjs +62 -0
  392. package/components/input/button-group/fesm2022/index.mjs.map +1 -0
  393. package/components/input/button-group/index.d.ts +5 -0
  394. package/components/input/button-group/package.json +20 -0
  395. package/components/input/button-group/public_api.d.ts +1 -0
  396. package/components/input/calendar/bundles/index.umd.js +25 -38
  397. package/components/input/calendar/esm2022/calendar.component.mjs +22 -36
  398. package/components/input/calendar/fesm2022/index.mjs +23 -36
  399. package/components/input/calendar/fesm2022/index.mjs.map +1 -1
  400. package/components/input/calendar/package.json +0 -3
  401. package/components/input/caption-position/.npmignore +2 -0
  402. package/components/input/caption-position/bundles/index.umd.js +196 -0
  403. package/components/input/caption-position/esm2022/caption-position.directive.mjs +172 -0
  404. package/components/input/caption-position/esm2022/index.mjs +5 -0
  405. package/components/input/caption-position/esm2022/public_api.mjs +2 -0
  406. package/components/input/caption-position/fesm2022/index.mjs +178 -0
  407. package/components/input/caption-position/fesm2022/index.mjs.map +1 -0
  408. package/components/input/caption-position/index.d.ts +5 -0
  409. package/components/input/caption-position/package.json +20 -0
  410. package/components/input/caption-position/public_api.d.ts +1 -0
  411. package/components/input/checkbox/.npmignore +2 -0
  412. package/components/input/checkbox/bundles/index.umd.js +190 -0
  413. package/components/input/{default/checkbox → checkbox}/checkbox.component.d.ts +1 -1
  414. package/components/input/checkbox/esm2022/checkbox.component.mjs +145 -0
  415. package/components/input/checkbox/esm2022/checkbox.props.mjs +27 -0
  416. package/components/{basic/progress → input/checkbox}/esm2022/index.mjs +1 -1
  417. package/components/input/checkbox/esm2022/public_api.mjs +2 -0
  418. package/components/input/checkbox/fesm2022/index.mjs +175 -0
  419. package/components/input/checkbox/fesm2022/index.mjs.map +1 -0
  420. package/components/input/checkbox/index.d.ts +5 -0
  421. package/components/input/checkbox/package.json +20 -0
  422. package/components/input/checkbox/public_api.d.ts +1 -0
  423. package/components/input/checkboxset/.npmignore +2 -0
  424. package/components/input/checkboxset/bundles/index.umd.js +151 -0
  425. package/components/input/{default/checkboxset → checkboxset}/checkboxset.component.d.ts +1 -1
  426. package/components/input/checkboxset/esm2022/checkboxset.component.mjs +99 -0
  427. package/components/input/checkboxset/esm2022/checkboxset.props.mjs +35 -0
  428. package/components/input/checkboxset/esm2022/index.mjs +5 -0
  429. package/components/input/checkboxset/esm2022/public_api.mjs +2 -0
  430. package/components/input/checkboxset/fesm2022/index.mjs +138 -0
  431. package/components/input/checkboxset/fesm2022/index.mjs.map +1 -0
  432. package/components/input/checkboxset/index.d.ts +5 -0
  433. package/components/input/checkboxset/package.json +20 -0
  434. package/components/input/checkboxset/public_api.d.ts +1 -0
  435. package/components/input/chips/bundles/index.umd.js +94 -153
  436. package/components/input/chips/chips.component.d.ts +1 -1
  437. package/components/input/chips/esm2022/chips.component.mjs +41 -101
  438. package/components/input/chips/fesm2022/index.mjs +42 -101
  439. package/components/input/chips/fesm2022/index.mjs.map +1 -1
  440. package/components/input/chips/package.json +0 -3
  441. package/components/input/color-picker/bundles/index.umd.js +35 -74
  442. package/components/input/color-picker/color-picker.component.d.ts +2 -2
  443. package/components/input/color-picker/esm2022/color-picker.component.mjs +34 -75
  444. package/components/input/color-picker/fesm2022/index.mjs +36 -75
  445. package/components/input/color-picker/fesm2022/index.mjs.map +1 -1
  446. package/components/input/color-picker/package.json +0 -3
  447. package/components/input/composite/.npmignore +2 -0
  448. package/components/input/composite/bundles/index.umd.js +111 -0
  449. package/components/input/composite/esm2022/composite.directive.mjs +79 -0
  450. package/components/input/composite/esm2022/composite.props.mjs +10 -0
  451. package/components/input/composite/esm2022/index.mjs +5 -0
  452. package/components/input/composite/esm2022/public_api.mjs +2 -0
  453. package/components/input/composite/fesm2022/index.mjs +94 -0
  454. package/components/input/composite/fesm2022/index.mjs.map +1 -0
  455. package/components/input/composite/index.d.ts +5 -0
  456. package/components/input/composite/package.json +20 -0
  457. package/components/input/composite/public_api.d.ts +1 -0
  458. package/components/input/currency/bundles/index.umd.js +31 -52
  459. package/components/input/currency/currency.component.d.ts +1 -1
  460. package/components/input/currency/esm2022/currency.component.mjs +28 -50
  461. package/components/input/currency/fesm2022/index.mjs +30 -51
  462. package/components/input/currency/fesm2022/index.mjs.map +1 -1
  463. package/components/input/currency/package.json +0 -3
  464. package/components/input/dataset-aware-form/.npmignore +2 -0
  465. package/components/input/dataset-aware-form/bundles/index.umd.js +328 -0
  466. package/components/input/{default → dataset-aware-form}/dataset-aware-form.component.d.ts +1 -1
  467. package/components/input/dataset-aware-form/esm2022/dataset-aware-form.component.mjs +307 -0
  468. package/components/input/dataset-aware-form/esm2022/index.mjs +5 -0
  469. package/components/input/dataset-aware-form/esm2022/public_api.mjs +2 -0
  470. package/components/input/dataset-aware-form/fesm2022/index.mjs +314 -0
  471. package/components/input/dataset-aware-form/fesm2022/index.mjs.map +1 -0
  472. package/components/input/dataset-aware-form/index.d.ts +5 -0
  473. package/components/input/dataset-aware-form/package.json +20 -0
  474. package/components/input/dataset-aware-form/public_api.d.ts +1 -0
  475. package/components/input/epoch/base-date-time/.npmignore +2 -0
  476. package/components/input/epoch/{base-date-time.component.d.ts → base-date-time/base-date-time.component.d.ts} +1 -1
  477. package/components/input/epoch/base-date-time/bundles/index.umd.js +1086 -0
  478. package/components/input/epoch/{esm2022 → base-date-time/esm2022}/base-date-time.component.mjs +22 -31
  479. package/components/input/epoch/base-date-time/esm2022/index.mjs +5 -0
  480. package/components/input/epoch/base-date-time/esm2022/public_api.mjs +2 -0
  481. package/components/input/epoch/base-date-time/fesm2022/index.mjs +1077 -0
  482. package/components/input/epoch/base-date-time/fesm2022/index.mjs.map +1 -0
  483. package/components/input/epoch/base-date-time/index.d.ts +5 -0
  484. package/components/input/epoch/base-date-time/package.json +20 -0
  485. package/components/input/epoch/base-date-time/public_api.d.ts +1 -0
  486. package/components/input/epoch/date/.npmignore +2 -0
  487. package/components/input/epoch/date/bundles/index.umd.js +492 -0
  488. package/components/input/epoch/date/date.component.d.ts +2 -2
  489. package/components/input/epoch/date/esm2022/date.component.mjs +322 -0
  490. package/components/input/epoch/{esm2022/date → date/esm2022}/date.props.mjs +1 -1
  491. package/components/input/epoch/{esm2022/date → date/esm2022}/imaskUtil.mjs +1 -1
  492. package/components/input/epoch/date/esm2022/index.mjs +5 -0
  493. package/components/input/epoch/date/esm2022/public_api.mjs +2 -0
  494. package/components/input/epoch/date/fesm2022/index.mjs +482 -0
  495. package/components/input/epoch/date/fesm2022/index.mjs.map +1 -0
  496. package/components/input/epoch/date/index.d.ts +5 -0
  497. package/components/input/epoch/date/package.json +20 -0
  498. package/components/input/epoch/date/public_api.d.ts +1 -0
  499. package/components/input/epoch/date-time/.npmignore +2 -0
  500. package/components/input/epoch/date-time/bundles/index.umd.js +518 -0
  501. package/components/input/epoch/date-time/date-time.component.d.ts +1 -1
  502. package/components/input/epoch/date-time/esm2022/date-time.component.mjs +458 -0
  503. package/components/input/epoch/{esm2022/date-time → date-time/esm2022}/date-time.props.mjs +1 -1
  504. package/components/input/epoch/date-time/esm2022/index.mjs +5 -0
  505. package/components/input/epoch/date-time/esm2022/public_api.mjs +2 -0
  506. package/components/input/epoch/date-time/fesm2022/index.mjs +509 -0
  507. package/components/input/epoch/date-time/fesm2022/index.mjs.map +1 -0
  508. package/components/input/epoch/date-time/index.d.ts +5 -0
  509. package/components/input/epoch/date-time/package.json +20 -0
  510. package/components/input/epoch/date-time/public_api.d.ts +1 -0
  511. package/components/input/epoch/date-time-picker/.npmignore +2 -0
  512. package/components/input/epoch/date-time-picker/bundles/index.umd.js +453 -0
  513. package/components/input/epoch/date-time-picker/esm2022/date-time-picker.component.mjs +433 -0
  514. package/components/input/epoch/date-time-picker/esm2022/index.mjs +5 -0
  515. package/components/input/epoch/date-time-picker/esm2022/public_api.mjs +2 -0
  516. package/components/input/epoch/date-time-picker/fesm2022/index.mjs +439 -0
  517. package/components/input/epoch/date-time-picker/fesm2022/index.mjs.map +1 -0
  518. package/components/input/epoch/date-time-picker/index.d.ts +5 -0
  519. package/components/input/epoch/date-time-picker/package.json +20 -0
  520. package/components/input/epoch/date-time-picker/public_api.d.ts +1 -0
  521. package/components/input/epoch/picker/.npmignore +2 -0
  522. package/components/input/epoch/picker/bundles/index.umd.js +192 -0
  523. package/components/input/epoch/picker/esm2022/index.mjs +5 -0
  524. package/components/input/epoch/picker/esm2022/picker.component.mjs +165 -0
  525. package/components/input/epoch/picker/esm2022/public_api.mjs +3 -0
  526. package/components/input/epoch/picker/fesm2022/index.mjs +172 -0
  527. package/components/input/epoch/picker/fesm2022/index.mjs.map +1 -0
  528. package/components/input/epoch/picker/index.d.ts +5 -0
  529. package/components/input/epoch/picker/package.json +20 -0
  530. package/components/input/epoch/picker/public_api.d.ts +2 -0
  531. package/components/input/epoch/time/.npmignore +2 -0
  532. package/components/input/epoch/time/bundles/index.umd.js +397 -0
  533. package/components/input/epoch/time/esm2022/index.mjs +5 -0
  534. package/components/input/epoch/time/esm2022/public_api.mjs +2 -0
  535. package/components/input/epoch/time/esm2022/time.component.mjs +348 -0
  536. package/components/input/epoch/{esm2022/time → time/esm2022}/time.props.mjs +1 -1
  537. package/components/input/epoch/time/fesm2022/index.mjs +387 -0
  538. package/components/input/epoch/time/fesm2022/index.mjs.map +1 -0
  539. package/components/input/epoch/time/index.d.ts +5 -0
  540. package/components/input/epoch/time/package.json +20 -0
  541. package/components/input/epoch/time/public_api.d.ts +1 -0
  542. package/components/input/epoch/time/time.component.d.ts +1 -1
  543. package/components/input/file-upload/bundles/index.umd.js +56 -348
  544. package/components/input/file-upload/esm2022/file-upload.component.mjs +20 -313
  545. package/components/input/file-upload/fesm2022/index.mjs +20 -312
  546. package/components/input/file-upload/fesm2022/index.mjs.map +1 -1
  547. package/components/input/file-upload/package.json +0 -3
  548. package/components/input/number/.npmignore +2 -0
  549. package/components/input/number/bundles/index.umd.js +101 -0
  550. package/components/input/number/esm2022/index.mjs +5 -0
  551. package/components/input/number/esm2022/number.component.mjs +49 -0
  552. package/components/input/number/esm2022/number.props.mjs +35 -0
  553. package/components/input/number/esm2022/public_api.mjs +2 -0
  554. package/components/input/number/fesm2022/index.mjs +87 -0
  555. package/components/input/number/fesm2022/index.mjs.map +1 -0
  556. package/components/input/number/index.d.ts +5 -0
  557. package/components/input/{default/number → number}/number.component.d.ts +1 -1
  558. package/components/input/number/package.json +20 -0
  559. package/components/input/number/public_api.d.ts +1 -0
  560. package/components/input/radioset/.npmignore +2 -0
  561. package/components/input/radioset/bundles/index.umd.js +136 -0
  562. package/components/input/radioset/esm2022/index.mjs +5 -0
  563. package/components/input/radioset/esm2022/public_api.mjs +2 -0
  564. package/components/input/radioset/esm2022/radioset.component.mjs +84 -0
  565. package/components/input/radioset/esm2022/radioset.props.mjs +35 -0
  566. package/components/input/radioset/fesm2022/index.mjs +123 -0
  567. package/components/input/radioset/fesm2022/index.mjs.map +1 -0
  568. package/components/input/radioset/index.d.ts +5 -0
  569. package/components/input/radioset/package.json +20 -0
  570. package/components/input/radioset/public_api.d.ts +1 -0
  571. package/components/input/{default/radioset → radioset}/radioset.component.d.ts +1 -1
  572. package/components/input/rating/bundles/index.umd.js +49 -103
  573. package/components/input/rating/esm2022/rating.component.mjs +24 -79
  574. package/components/input/rating/fesm2022/index.mjs +25 -79
  575. package/components/input/rating/fesm2022/index.mjs.map +1 -1
  576. package/components/input/rating/package.json +0 -3
  577. package/components/input/rating/rating.component.d.ts +1 -1
  578. package/components/input/select/.npmignore +2 -0
  579. package/components/input/select/bundles/index.umd.js +219 -0
  580. package/components/input/select/esm2022/index.mjs +5 -0
  581. package/components/input/select/esm2022/public_api.mjs +2 -0
  582. package/components/input/select/esm2022/select.component.mjs +166 -0
  583. package/components/input/select/esm2022/select.props.mjs +36 -0
  584. package/components/input/select/fesm2022/index.mjs +205 -0
  585. package/components/input/select/fesm2022/index.mjs.map +1 -0
  586. package/components/input/select/index.d.ts +5 -0
  587. package/components/input/select/package.json +20 -0
  588. package/components/input/select/public_api.d.ts +1 -0
  589. package/components/input/{default/select → select}/select.component.d.ts +1 -1
  590. package/components/input/slider/bundles/index.umd.js +44 -111
  591. package/components/input/slider/esm2022/slider.component.mjs +25 -95
  592. package/components/input/slider/esm2022/slider.props.mjs +1 -1
  593. package/components/input/slider/fesm2022/index.mjs +25 -93
  594. package/components/input/slider/fesm2022/index.mjs.map +1 -1
  595. package/components/input/slider/package.json +0 -3
  596. package/components/input/slider/slider.component.d.ts +2 -2
  597. package/components/input/switch/.npmignore +2 -0
  598. package/components/input/switch/bundles/index.umd.js +204 -0
  599. package/components/input/switch/esm2022/index.mjs +5 -0
  600. package/components/input/switch/esm2022/public_api.mjs +2 -0
  601. package/components/input/switch/esm2022/switch.component.mjs +159 -0
  602. package/components/input/switch/esm2022/switch.props.mjs +28 -0
  603. package/components/input/switch/fesm2022/index.mjs +191 -0
  604. package/components/input/switch/fesm2022/index.mjs.map +1 -0
  605. package/components/input/switch/index.d.ts +5 -0
  606. package/components/input/switch/package.json +20 -0
  607. package/components/input/switch/public_api.d.ts +1 -0
  608. package/components/input/{default/switch → switch}/switch.component.d.ts +1 -1
  609. package/components/input/text/.npmignore +2 -0
  610. package/components/input/{default/text/base → text/base-input}/base-input.d.ts +1 -1
  611. package/components/input/text/bundles/index.umd.js +1070 -0
  612. package/components/input/text/esm2022/base-input/base-input.mjs +93 -0
  613. package/components/input/text/esm2022/index.mjs +5 -0
  614. package/components/input/text/esm2022/input-calendar/input-calendar.component.mjs +46 -0
  615. package/components/input/text/esm2022/input-calendar/input-calendar.props.mjs +30 -0
  616. package/components/input/text/esm2022/input-color/input-color.component.mjs +46 -0
  617. package/components/input/text/esm2022/input-color/input-color.props.mjs +27 -0
  618. package/components/input/text/esm2022/input-email/input-email.component.mjs +46 -0
  619. package/components/input/text/esm2022/input-email/input-email.props.mjs +29 -0
  620. package/components/input/text/esm2022/input-number/input-number.component.mjs +56 -0
  621. package/components/input/text/esm2022/input-number/input-number.props.mjs +32 -0
  622. package/components/input/text/esm2022/input-text/input-text.component.mjs +121 -0
  623. package/components/input/text/esm2022/input-text/input-text.props.mjs +46 -0
  624. package/components/input/text/esm2022/number-locale/number-locale.mjs +539 -0
  625. package/components/input/text/esm2022/public_api.mjs +8 -0
  626. package/components/input/text/fesm2022/index.mjs +1054 -0
  627. package/components/input/text/fesm2022/index.mjs.map +1 -0
  628. package/components/input/text/index.d.ts +5 -0
  629. package/components/input/{default/text/calendar → text/input-calendar}/input-calendar.component.d.ts +1 -1
  630. package/components/input/{default/text/color → text/input-color}/input-color.component.d.ts +1 -1
  631. package/components/input/{default/text/email → text/input-email}/input-email.component.d.ts +1 -1
  632. package/components/input/{default/text/number → text/input-number}/input-number.component.d.ts +1 -1
  633. package/components/input/{default/text/text → text/input-text}/input-text.component.d.ts +1 -1
  634. package/components/input/{default/text/locale → text/number-locale}/number-locale.d.ts +1 -1
  635. package/components/input/text/package.json +20 -0
  636. package/components/input/text/public_api.d.ts +7 -0
  637. package/components/input/textarea/.npmignore +2 -0
  638. package/components/input/textarea/bundles/index.umd.js +101 -0
  639. package/components/input/textarea/esm2022/index.mjs +5 -0
  640. package/components/input/textarea/esm2022/public_api.mjs +2 -0
  641. package/components/input/textarea/esm2022/textarea.component.mjs +53 -0
  642. package/components/input/textarea/esm2022/textarea.props.mjs +30 -0
  643. package/components/input/textarea/fesm2022/index.mjs +87 -0
  644. package/components/input/textarea/fesm2022/index.mjs.map +1 -0
  645. package/components/input/textarea/index.d.ts +5 -0
  646. package/components/input/textarea/package.json +20 -0
  647. package/components/input/textarea/public_api.d.ts +1 -0
  648. package/components/input/{default/textarea → textarea}/textarea.component.d.ts +1 -1
  649. package/components/navigation/breadcrumb/bundles/index.umd.js +37 -79
  650. package/components/navigation/breadcrumb/esm2022/breadcrumb.component.mjs +20 -64
  651. package/components/navigation/breadcrumb/fesm2022/index.mjs +21 -64
  652. package/components/navigation/breadcrumb/fesm2022/index.mjs.map +1 -1
  653. package/components/navigation/breadcrumb/package.json +0 -3
  654. package/components/navigation/menu/bundles/index.umd.js +247 -442
  655. package/components/navigation/menu/esm2022/menu-adapator.component.mjs +14 -19
  656. package/components/navigation/menu/esm2022/menu-dropdown/menu-dropdown.component.mjs +13 -29
  657. package/components/navigation/menu/esm2022/menu-dropdown-item/menu-dropdown-item.component.mjs +43 -100
  658. package/components/navigation/menu/esm2022/menu.component.mjs +53 -104
  659. package/components/navigation/menu/esm2022/nav/nav-item/nav-item.directive.mjs +30 -37
  660. package/components/navigation/menu/esm2022/nav/nav.component.mjs +20 -88
  661. package/components/navigation/menu/esm2022/nav/navigation-control.directive.mjs +14 -14
  662. package/components/navigation/menu/fesm2022/index.mjs +174 -369
  663. package/components/navigation/menu/fesm2022/index.mjs.map +1 -1
  664. package/components/navigation/menu/menu-dropdown/menu-dropdown.component.d.ts +2 -3
  665. package/components/navigation/menu/menu-dropdown-item/menu-dropdown-item.component.d.ts +3 -3
  666. package/components/navigation/menu/package.json +0 -3
  667. package/components/navigation/navbar/bundles/index.umd.js +32 -83
  668. package/components/navigation/navbar/esm2022/navbar.component.mjs +20 -72
  669. package/components/navigation/navbar/fesm2022/index.mjs +20 -71
  670. package/components/navigation/navbar/fesm2022/index.mjs.map +1 -1
  671. package/components/navigation/navbar/package.json +0 -3
  672. package/components/navigation/popover/bundles/index.umd.js +31 -59
  673. package/components/navigation/popover/esm2022/popover.component.mjs +29 -58
  674. package/components/navigation/popover/fesm2022/index.mjs +31 -59
  675. package/components/navigation/popover/fesm2022/index.mjs.map +1 -1
  676. package/components/navigation/popover/package.json +0 -3
  677. package/components/page/default/bundles/index.umd.js +109 -123
  678. package/components/page/default/esm2022/content/content.component.mjs +16 -25
  679. package/components/page/default/esm2022/layout.directive.mjs +21 -21
  680. package/components/page/default/esm2022/page-content/page-content.component.mjs +16 -23
  681. package/components/page/default/esm2022/page.directive.mjs +21 -21
  682. package/components/page/default/esm2022/router-outlet.directive.mjs +20 -20
  683. package/components/page/default/esm2022/spa-page.directive.mjs +21 -21
  684. package/components/page/default/fesm2022/index.mjs +111 -125
  685. package/components/page/default/fesm2022/index.mjs.map +1 -1
  686. package/components/page/default/package.json +0 -3
  687. package/components/page/footer/bundles/index.umd.js +20 -20
  688. package/components/page/footer/esm2022/footer.directive.mjs +21 -21
  689. package/components/page/footer/fesm2022/index.mjs +21 -21
  690. package/components/page/footer/fesm2022/index.mjs.map +1 -1
  691. package/components/page/footer/package.json +0 -3
  692. package/components/page/header/bundles/index.umd.js +19 -26
  693. package/components/page/header/esm2022/header.component.mjs +16 -24
  694. package/components/page/header/fesm2022/index.mjs +17 -24
  695. package/components/page/header/fesm2022/index.mjs.map +1 -1
  696. package/components/page/header/package.json +0 -3
  697. package/components/page/left-panel/bundles/index.umd.js +30 -30
  698. package/components/page/left-panel/esm2022/left-panel.directive.mjs +31 -31
  699. package/components/page/left-panel/fesm2022/index.mjs +31 -31
  700. package/components/page/left-panel/fesm2022/index.mjs.map +1 -1
  701. package/components/page/left-panel/package.json +0 -3
  702. package/components/page/right-panel/bundles/index.umd.js +23 -23
  703. package/components/page/right-panel/esm2022/right-panel.directive.mjs +24 -24
  704. package/components/page/right-panel/fesm2022/index.mjs +24 -24
  705. package/components/page/right-panel/fesm2022/index.mjs.map +1 -1
  706. package/components/page/right-panel/package.json +0 -3
  707. package/components/page/top-nav/bundles/index.umd.js +20 -20
  708. package/components/page/top-nav/esm2022/top-nav.directive.mjs +21 -21
  709. package/components/page/top-nav/fesm2022/index.mjs +21 -21
  710. package/components/page/top-nav/fesm2022/index.mjs.map +1 -1
  711. package/components/page/top-nav/package.json +0 -3
  712. package/components/prefab/bundles/index.umd.js +41 -41
  713. package/components/prefab/esm2022/prefab-container/prefab-container.directive.mjs +20 -20
  714. package/components/prefab/esm2022/prefab.directive.mjs +23 -23
  715. package/components/prefab/fesm2022/index.mjs +42 -42
  716. package/components/prefab/fesm2022/index.mjs.map +1 -1
  717. package/components/prefab/package.json +0 -3
  718. package/core/bundles/index.umd.js +80 -61
  719. package/core/esm2022/services/constant.service.mjs +7 -7
  720. package/core/esm2022/services/custom-icons-loader.service.mjs +7 -7
  721. package/core/esm2022/services/field-type.service.mjs +7 -7
  722. package/core/esm2022/services/field-widget.service.mjs +7 -7
  723. package/core/esm2022/services/pagination.service.mjs +7 -7
  724. package/core/esm2022/services/script-loader.service.mjs +7 -7
  725. package/core/esm2022/services/state-persistence.service.mjs +7 -7
  726. package/core/esm2022/services/user-custom-pipe-manager.service.mjs +7 -7
  727. package/core/esm2022/services/utils.service.mjs +7 -7
  728. package/core/esm2022/services/viewport.service.mjs +7 -7
  729. package/core/esm2022/types/types.mjs +1 -1
  730. package/core/esm2022/utils/build-utils.mjs +21 -2
  731. package/core/fesm2022/index.mjs +80 -61
  732. package/core/fesm2022/index.mjs.map +1 -1
  733. package/core/package.json +3 -6
  734. package/core/types/types.d.ts +2 -1
  735. package/http/bundles/index.umd.js +8 -8
  736. package/http/esm2022/http.service.mjs +9 -9
  737. package/http/fesm2022/index.mjs +8 -8
  738. package/http/fesm2022/index.mjs.map +1 -1
  739. package/http/package.json +2 -5
  740. package/locales/moment/ar-dz.js +8 -8
  741. package/locales/moment/ar-ly.js +8 -8
  742. package/locales/moment/ar-ps.js +123 -0
  743. package/locales/moment/ar.js +8 -8
  744. package/locales/moment/be.js +2 -2
  745. package/locales/moment/bs.js +14 -4
  746. package/locales/moment/ca.js +6 -6
  747. package/locales/moment/cs.js +5 -4
  748. package/locales/moment/cv.js +2 -2
  749. package/locales/moment/en-au.js +6 -6
  750. package/locales/moment/en-ca.js +6 -6
  751. package/locales/moment/en-gb.js +6 -6
  752. package/locales/moment/en-ie.js +6 -6
  753. package/locales/moment/en-il.js +6 -6
  754. package/locales/moment/en-in.js +6 -6
  755. package/locales/moment/en-nz.js +6 -6
  756. package/locales/moment/en-sg.js +6 -6
  757. package/locales/moment/it.js +4 -4
  758. package/locales/moment/ku-kmr.js +125 -0
  759. package/locales/moment/lt.js +2 -2
  760. package/locales/moment/me.js +2 -2
  761. package/locales/moment/nb.js +4 -4
  762. package/locales/moment/nl-be.js +1 -1
  763. package/locales/moment/nl.js +1 -1
  764. package/locales/moment/oc-lnc.js +6 -6
  765. package/locales/moment/ru.js +2 -2
  766. package/locales/moment/sv.js +6 -6
  767. package/locales/moment/tet.js +6 -6
  768. package/locales/moment/tlh.js +8 -8
  769. package/locales/moment/tzl.js +2 -2
  770. package/locales/moment/uk.js +4 -4
  771. package/locales/moment/x-pseudo.js +6 -6
  772. package/locales/moment-timezone/moment-timezone-with-data.js +2 -2
  773. package/npm-shrinkwrap.json +2 -2
  774. package/oAuth/bundles/index.umd.js +5 -5
  775. package/oAuth/esm2022/oAuth.service.mjs +6 -6
  776. package/oAuth/fesm2022/index.mjs +5 -5
  777. package/oAuth/fesm2022/index.mjs.map +1 -1
  778. package/oAuth/package.json +2 -5
  779. package/package-lock.json +2 -2
  780. package/package.json +1 -1
  781. package/runtime/base/bundles/index.umd.js +3162 -3100
  782. package/runtime/base/components/empty-component/empty-page.component.d.ts +1 -0
  783. package/runtime/base/esm2022/components/app-component/app.component.mjs +14 -95
  784. package/runtime/base/esm2022/components/app-spinner.component.mjs +34 -45
  785. package/runtime/base/esm2022/components/base-custom-widget.component.mjs +8 -7
  786. package/runtime/base/esm2022/components/base-layout.component.mjs +14 -21
  787. package/runtime/base/esm2022/components/base-page.component.mjs +12 -19
  788. package/runtime/base/esm2022/components/base-partial.component.mjs +9 -14
  789. package/runtime/base/esm2022/components/base-prefab.component.mjs +9 -14
  790. package/runtime/base/esm2022/components/base-spa-page.component.mjs +12 -19
  791. package/runtime/base/esm2022/components/custom-toaster.component.mjs +30 -52
  792. package/runtime/base/esm2022/components/empty-component/empty-page.component.mjs +33 -15
  793. package/runtime/base/esm2022/components/prefab-preview.component.mjs +19 -26
  794. package/runtime/base/esm2022/directives/accessroles.directive.mjs +17 -17
  795. package/runtime/base/esm2022/directives/prefab.directive.mjs +15 -15
  796. package/runtime/base/esm2022/guards/auth.guard.mjs +6 -6
  797. package/runtime/base/esm2022/guards/can-deactivate-page.guard.mjs +11 -11
  798. package/runtime/base/esm2022/guards/page-not-found.guard.mjs +6 -6
  799. package/runtime/base/esm2022/guards/role.guard.mjs +6 -6
  800. package/runtime/base/esm2022/overrides/wm_dom_renderer.mjs +12 -12
  801. package/runtime/base/esm2022/overrides/wm_shared_styles_host.mjs +14 -14
  802. package/runtime/base/esm2022/public_api.mjs +5 -2
  803. package/runtime/base/esm2022/resolves/app-before-load.resolve.mjs +22 -0
  804. package/runtime/base/esm2022/resolves/app-extension.resolve.mjs +6 -6
  805. package/runtime/base/esm2022/resolves/app-js.resolve.mjs +6 -6
  806. package/runtime/base/esm2022/resolves/app-variables.resolve.mjs +9 -9
  807. package/runtime/base/esm2022/resolves/i18n.resolve.mjs +6 -6
  808. package/runtime/base/esm2022/resolves/metadata.resolve.mjs +9 -9
  809. package/runtime/base/esm2022/resolves/security-config.resolve.mjs +9 -9
  810. package/runtime/base/esm2022/runtime-base.module.mjs +457 -316
  811. package/runtime/base/esm2022/services/app-defaults.service.mjs +6 -6
  812. package/runtime/base/esm2022/services/app.manager.service.mjs +25 -9
  813. package/runtime/base/esm2022/services/app.service.mjs +39 -18
  814. package/runtime/base/esm2022/services/dynamic-component-ref-provider.service.mjs +6 -6
  815. package/runtime/base/esm2022/services/http-interceptor.services.mjs +6 -6
  816. package/runtime/base/esm2022/services/i18n.service.mjs +37 -34
  817. package/runtime/base/esm2022/services/navigation.service.mjs +6 -6
  818. package/runtime/base/esm2022/services/pipe-provider.service.mjs +13 -13
  819. package/runtime/base/esm2022/services/pipe.service.mjs +10 -8
  820. package/runtime/base/esm2022/services/prefab-manager.service.mjs +6 -6
  821. package/runtime/base/esm2022/services/spinner.service.mjs +6 -6
  822. package/runtime/base/esm2022/services/toaster.service.mjs +6 -6
  823. package/runtime/base/esm2022/util/fragment-monitor.mjs +6 -6
  824. package/runtime/base/esm2022/util/utils.mjs +15 -1
  825. package/runtime/base/esm2022/util/wm-route-reuse-strategy.mjs +1 -1
  826. package/runtime/base/fesm2022/index.mjs +3145 -3071
  827. package/runtime/base/fesm2022/index.mjs.map +1 -1
  828. package/runtime/base/package.json +2 -5
  829. package/runtime/base/public_api.d.ts +4 -1
  830. package/runtime/base/resolves/app-before-load.resolve.d.ts +11 -0
  831. package/runtime/base/runtime-base.module.d.ts +96 -59
  832. package/runtime/base/services/app.manager.service.d.ts +2 -1
  833. package/runtime/base/services/app.service.d.ts +3 -2
  834. package/runtime/base/services/i18n.service.d.ts +2 -1
  835. package/runtime/base/util/utils.d.ts +2 -1
  836. package/runtime/dynamic/app/app.config.d.ts +1 -1
  837. package/runtime/dynamic/app/services/app-variables-provider.service.d.ts +3 -1
  838. package/runtime/dynamic/bundles/index.umd.js +145 -114
  839. package/runtime/dynamic/esm2022/app/app.config.mjs +11 -10
  840. package/runtime/dynamic/esm2022/app/app.module.mjs +35 -5
  841. package/runtime/dynamic/esm2022/app/app.routes.mjs +2 -11
  842. package/runtime/dynamic/esm2022/app/components/page-wrapper.component.mjs +11 -16
  843. package/runtime/dynamic/esm2022/app/services/app-extension.service.mjs +9 -9
  844. package/runtime/dynamic/esm2022/app/services/app-js-provider.service.mjs +9 -9
  845. package/runtime/dynamic/esm2022/app/services/app-resource-manager.service.mjs +6 -6
  846. package/runtime/dynamic/esm2022/app/services/app-variables-provider.service.mjs +15 -11
  847. package/runtime/dynamic/esm2022/app/services/component-ref-provider.service.mjs +57 -8
  848. package/runtime/dynamic/esm2022/app/services/customwidget-config-provider.service.mjs +6 -6
  849. package/runtime/dynamic/esm2022/app/services/prefab-config-provider.service.mjs +6 -6
  850. package/runtime/dynamic/fesm2022/index.mjs +143 -88
  851. package/runtime/dynamic/fesm2022/index.mjs.map +1 -1
  852. package/runtime/dynamic/package.json +2 -5
  853. package/scripts/datatable/datatable.js +26 -5
  854. package/scripts/jquery-ui/ui/widgets/droppable.js +3 -3
  855. package/scripts/jquery-ui/ui/widgets/resizable.js +72 -19
  856. package/scripts/jquery-ui/ui/widgets/sortable.js +9 -16
  857. package/security/bundles/index.umd.js +5 -5
  858. package/security/esm2022/security.service.mjs +6 -6
  859. package/security/fesm2022/index.mjs +5 -5
  860. package/security/fesm2022/index.mjs.map +1 -1
  861. package/security/package.json +2 -5
  862. package/swipey/fesm2022/index.mjs.map +1 -1
  863. package/swipey/package.json +2 -5
  864. package/transpiler/build.d.ts +1 -1
  865. package/transpiler/bundles/index.umd.js +94 -56
  866. package/transpiler/esm2022/build.mjs +5 -2
  867. package/transpiler/esm2022/imports.mjs +92 -57
  868. package/transpiler/fesm2022/index.mjs +94 -56
  869. package/transpiler/fesm2022/index.mjs.map +1 -1
  870. package/transpiler/package.json +3 -6
  871. package/variables/bundles/index.umd.js +20 -10
  872. package/variables/constants/variables.constants.d.ts +9 -0
  873. package/variables/esm2022/constants/variables.constants.mjs +10 -1
  874. package/variables/esm2022/service/metadata-service/metadata.service.mjs +6 -6
  875. package/variables/esm2022/service/variables.service.mjs +6 -6
  876. package/variables/fesm2022/index.mjs +20 -11
  877. package/variables/fesm2022/index.mjs.map +1 -1
  878. package/variables/package.json +2 -5
  879. package/variables/service/variables.service.d.ts +1 -1
  880. package/build-task/esm2022/basic/default/anchor/anchor.build.mjs +0 -15
  881. package/build-task/esm2022/basic/default/audio/audio.build.mjs +0 -10
  882. package/build-task/esm2022/basic/default/html/html.build.mjs +0 -15
  883. package/build-task/esm2022/basic/default/icon/icon.build.mjs +0 -10
  884. package/build-task/esm2022/basic/default/iframe/iframe.build.mjs +0 -10
  885. package/build-task/esm2022/basic/default/label/label.build.mjs +0 -25
  886. package/build-task/esm2022/basic/default/picture/picture.build.mjs +0 -14
  887. package/build-task/esm2022/basic/default/spinner/spinner.build.mjs +0 -15
  888. package/build-task/esm2022/basic/default/video/video.build.mjs +0 -10
  889. package/components/base/components.module.d.ts +0 -25
  890. package/components/base/esm2022/components.module.mjs +0 -152
  891. package/components/basic/default/bundles/index.umd.js +0 -1036
  892. package/components/basic/default/esm2022/anchor/anchor.component.mjs +0 -198
  893. package/components/basic/default/esm2022/anchor/anchor.props.mjs +0 -27
  894. package/components/basic/default/esm2022/audio/audio.component.mjs +0 -59
  895. package/components/basic/default/esm2022/audio/audio.props.mjs +0 -19
  896. package/components/basic/default/esm2022/html/html.directive.mjs +0 -76
  897. package/components/basic/default/esm2022/html/html.props.mjs +0 -12
  898. package/components/basic/default/esm2022/icon/icon.component.mjs +0 -70
  899. package/components/basic/default/esm2022/icon/icon.props.mjs +0 -19
  900. package/components/basic/default/esm2022/iframe/iframe.component.mjs +0 -85
  901. package/components/basic/default/esm2022/iframe/iframe.props.mjs +0 -15
  902. package/components/basic/default/esm2022/label/label.directive.mjs +0 -71
  903. package/components/basic/default/esm2022/label/label.props.mjs +0 -17
  904. package/components/basic/default/esm2022/picture/picture.directive.mjs +0 -95
  905. package/components/basic/default/esm2022/picture/picture.props.mjs +0 -23
  906. package/components/basic/default/esm2022/public_api.mjs +0 -10
  907. package/components/basic/default/esm2022/spinner/spinner.component.mjs +0 -130
  908. package/components/basic/default/esm2022/spinner/spinner.props.mjs +0 -20
  909. package/components/basic/default/esm2022/video/video.component.mjs +0 -113
  910. package/components/basic/default/esm2022/video/video.props.mjs +0 -24
  911. package/components/basic/default/fesm2022/index.mjs +0 -1012
  912. package/components/basic/default/fesm2022/index.mjs.map +0 -1
  913. package/components/basic/default/public_api.d.ts +0 -9
  914. package/components/basic/progress/bundles/index.umd.js +0 -361
  915. package/components/basic/progress/esm2022/progress-bar/progress-bar.component.mjs +0 -154
  916. package/components/basic/progress/esm2022/progress-circle/progress-circle.component.mjs +0 -132
  917. package/components/basic/progress/esm2022/public_api.mjs +0 -3
  918. package/components/basic/progress/esm2022/utils.mjs +0 -25
  919. package/components/basic/progress/fesm2022/index.mjs +0 -344
  920. package/components/basic/progress/fesm2022/index.mjs.map +0 -1
  921. package/components/basic/progress/public_api.d.ts +0 -2
  922. package/components/input/default/bundles/index.umd.js +0 -3559
  923. package/components/input/default/esm2022/base-form-custom.component.mjs +0 -94
  924. package/components/input/default/esm2022/base-form.component.mjs +0 -110
  925. package/components/input/default/esm2022/button/button.component.mjs +0 -106
  926. package/components/input/default/esm2022/button/button.props.mjs +0 -26
  927. package/components/input/default/esm2022/button-group/button-group.directive.mjs +0 -51
  928. package/components/input/default/esm2022/button-group/button-group.props.mjs +0 -10
  929. package/components/input/default/esm2022/caption-position.directive.mjs +0 -172
  930. package/components/input/default/esm2022/checkbox/checkbox.component.mjs +0 -179
  931. package/components/input/default/esm2022/checkbox/checkbox.props.mjs +0 -27
  932. package/components/input/default/esm2022/checkboxset/checkboxset.component.mjs +0 -268
  933. package/components/input/default/esm2022/checkboxset/checkboxset.props.mjs +0 -35
  934. package/components/input/default/esm2022/composite/composite.directive.mjs +0 -84
  935. package/components/input/default/esm2022/composite/composite.props.mjs +0 -10
  936. package/components/input/default/esm2022/dataset-aware-form.component.mjs +0 -307
  937. package/components/input/default/esm2022/number/number.component.mjs +0 -68
  938. package/components/input/default/esm2022/number/number.props.mjs +0 -35
  939. package/components/input/default/esm2022/public_api.mjs +0 -21
  940. package/components/input/default/esm2022/radioset/radioset.component.mjs +0 -251
  941. package/components/input/default/esm2022/radioset/radioset.props.mjs +0 -35
  942. package/components/input/default/esm2022/select/select.component.mjs +0 -230
  943. package/components/input/default/esm2022/select/select.props.mjs +0 -36
  944. package/components/input/default/esm2022/switch/switch.component.mjs +0 -227
  945. package/components/input/default/esm2022/switch/switch.props.mjs +0 -28
  946. package/components/input/default/esm2022/text/base/base-input.mjs +0 -93
  947. package/components/input/default/esm2022/text/calendar/input-calendar.component.mjs +0 -69
  948. package/components/input/default/esm2022/text/calendar/input-calendar.props.mjs +0 -30
  949. package/components/input/default/esm2022/text/color/input-color.component.mjs +0 -69
  950. package/components/input/default/esm2022/text/color/input-color.props.mjs +0 -27
  951. package/components/input/default/esm2022/text/email/input-email.component.mjs +0 -68
  952. package/components/input/default/esm2022/text/email/input-email.props.mjs +0 -29
  953. package/components/input/default/esm2022/text/locale/number-locale.mjs +0 -539
  954. package/components/input/default/esm2022/text/number/input-number.component.mjs +0 -79
  955. package/components/input/default/esm2022/text/number/input-number.props.mjs +0 -32
  956. package/components/input/default/esm2022/text/text/input-text.component.mjs +0 -145
  957. package/components/input/default/esm2022/text/text/input-text.props.mjs +0 -46
  958. package/components/input/default/esm2022/textarea/textarea.component.mjs +0 -85
  959. package/components/input/default/esm2022/textarea/textarea.props.mjs +0 -30
  960. package/components/input/default/fesm2022/index.mjs +0 -3529
  961. package/components/input/default/fesm2022/index.mjs.map +0 -1
  962. package/components/input/default/public_api.d.ts +0 -20
  963. package/components/input/epoch/bundles/index.umd.js +0 -3292
  964. package/components/input/epoch/esm2022/date/date.component.mjs +0 -376
  965. package/components/input/epoch/esm2022/date-time/date-time-picker.component.mjs +0 -473
  966. package/components/input/epoch/esm2022/date-time/date-time.component.mjs +0 -563
  967. package/components/input/epoch/esm2022/picker/picker.component.mjs +0 -184
  968. package/components/input/epoch/esm2022/public_api.mjs +0 -6
  969. package/components/input/epoch/esm2022/time/time.component.mjs +0 -432
  970. package/components/input/epoch/fesm2022/index.mjs +0 -3280
  971. package/components/input/epoch/fesm2022/index.mjs.map +0 -1
  972. package/components/input/epoch/public_api.d.ts +0 -5
  973. /package/build-task/basic/{default/anchor → anchor}/anchor.build.d.ts +0 -0
  974. /package/build-task/basic/{default/audio → audio}/audio.build.d.ts +0 -0
  975. /package/build-task/basic/{default/html → html}/html.build.d.ts +0 -0
  976. /package/build-task/basic/{default/icon → icon}/icon.build.d.ts +0 -0
  977. /package/build-task/basic/{default/iframe → iframe}/iframe.build.d.ts +0 -0
  978. /package/build-task/basic/{default/label → label}/label.build.d.ts +0 -0
  979. /package/build-task/basic/{default/picture → picture}/picture.build.d.ts +0 -0
  980. /package/build-task/basic/{default/spinner → spinner}/spinner.build.d.ts +0 -0
  981. /package/build-task/basic/{default/video → video}/video.build.d.ts +0 -0
  982. /package/components/basic/{default → anchor}/.npmignore +0 -0
  983. /package/components/basic/{default/anchor → anchor}/anchor.component.d.ts +0 -0
  984. /package/components/basic/{default/anchor → anchor}/anchor.props.d.ts +0 -0
  985. /package/components/basic/{progress → audio}/.npmignore +0 -0
  986. /package/components/basic/{default/audio → audio}/audio.component.d.ts +0 -0
  987. /package/components/basic/{default/audio → audio}/audio.props.d.ts +0 -0
  988. /package/components/{input/default → basic/html}/.npmignore +0 -0
  989. /package/components/basic/{default/html → html}/html.directive.d.ts +0 -0
  990. /package/components/basic/{default/html → html}/html.props.d.ts +0 -0
  991. /package/components/{input/epoch → basic/icon}/.npmignore +0 -0
  992. /package/components/basic/{default/icon → icon}/icon.component.d.ts +0 -0
  993. /package/components/basic/{default/icon → icon}/icon.props.d.ts +0 -0
  994. /package/components/basic/{default/iframe → iframe}/iframe.component.d.ts +0 -0
  995. /package/components/basic/{default/iframe → iframe}/iframe.props.d.ts +0 -0
  996. /package/components/basic/{default/label → label}/label.props.d.ts +0 -0
  997. /package/components/basic/{default/picture → picture}/picture.directive.d.ts +0 -0
  998. /package/components/basic/{default/picture → picture}/picture.props.d.ts +0 -0
  999. /package/components/basic/progress/{utils.d.ts → progress-utils/progress-utils.d.ts} +0 -0
  1000. /package/components/basic/{default/spinner → spinner}/spinner.component.d.ts +0 -0
  1001. /package/components/basic/{default/spinner → spinner}/spinner.props.d.ts +0 -0
  1002. /package/components/basic/{default/video → video}/video.component.d.ts +0 -0
  1003. /package/components/basic/{default/video → video}/video.props.d.ts +0 -0
  1004. /package/components/input/{default → base-form}/base-form.component.d.ts +0 -0
  1005. /package/components/input/{default/button → button}/button.component.d.ts +0 -0
  1006. /package/components/input/{default/button → button}/button.props.d.ts +0 -0
  1007. /package/components/input/{default/button-group → button-group}/button-group.directive.d.ts +0 -0
  1008. /package/components/input/{default/button-group → button-group}/button-group.props.d.ts +0 -0
  1009. /package/components/input/{default → caption-position}/caption-position.directive.d.ts +0 -0
  1010. /package/components/input/{default/checkbox → checkbox}/checkbox.props.d.ts +0 -0
  1011. /package/components/input/{default/checkboxset → checkboxset}/checkboxset.props.d.ts +0 -0
  1012. /package/components/input/{default/composite → composite}/composite.directive.d.ts +0 -0
  1013. /package/components/input/{default/composite → composite}/composite.props.d.ts +0 -0
  1014. /package/components/input/epoch/{date-time → date-time-picker}/date-time-picker.component.d.ts +0 -0
  1015. /package/components/input/{default/number → number}/number.props.d.ts +0 -0
  1016. /package/components/input/{default/radioset → radioset}/radioset.props.d.ts +0 -0
  1017. /package/components/input/{default/select → select}/select.props.d.ts +0 -0
  1018. /package/components/input/{default/switch → switch}/switch.props.d.ts +0 -0
  1019. /package/components/input/{default/text/calendar → text/input-calendar}/input-calendar.props.d.ts +0 -0
  1020. /package/components/input/{default/text/color → text/input-color}/input-color.props.d.ts +0 -0
  1021. /package/components/input/{default/text/email → text/input-email}/input-email.props.d.ts +0 -0
  1022. /package/components/input/{default/text/number → text/input-number}/input-number.props.d.ts +0 -0
  1023. /package/components/input/{default/text/text → text/input-text}/input-text.props.d.ts +0 -0
  1024. /package/components/input/{default/textarea → textarea}/textarea.props.d.ts +0 -0
@@ -1,212 +1,21 @@
1
1
  import { CommonModule } from '@angular/common';
2
- import { WmComponentsModule } from "@wm/components/base";
3
- import { FormsModule } from '@angular/forms';
2
+ import { FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
4
3
  import { ScrollableDirective } from './scrollable.directive';
5
4
  import { Attribute, Component, ElementRef, Inject, Injector, Optional, QueryList, ViewChild, ViewChildren } from '@angular/core';
6
- import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
7
5
  import { from, Observable, of } from 'rxjs';
8
6
  import { filter, mergeMap } from 'rxjs/operators';
9
7
  import { TypeaheadDirective, TypeaheadModule } from 'ngx-bootstrap/typeahead';
10
8
  import { addClass, adjustContainerPosition, App, DataSource, isDefined, isMobile, toBoolean } from '@wm/core';
11
- import { ALLFIELDS, convertDataToObject, extractDataAsArray, getContainerTargetClass, getUniqObjsByDataField, provideAs, provideAsWidgetRef, styler, transformFormData } from '@wm/components/base';
12
- import { DatasetAwareFormComponent } from '@wm/components/input';
9
+ import { ALLFIELDS, convertDataToObject, extractDataAsArray, getContainerTargetClass, getUniqObjsByDataField, ItemTemplateDirective, PartialContainerDirective, PartialParamHandlerDirective, provideAs, provideAsWidgetRef, styler, TextContentDirective, transformFormData } from '@wm/components/base';
10
+ import { DatasetAwareFormComponent } from '@wm/components/input/dataset-aware-form';
13
11
  import { registerProps } from './search.props';
14
12
  import { DataProvider } from './data-provider/data-provider';
15
13
  import { debounce, find, get, includes, isArray, isEmpty, isEqual, isObject, isUndefined, map, split, toString, trim } from "lodash-es";
16
14
  import * as i0 from "@angular/core";
17
15
  import * as i1 from "@wm/core";
18
16
  import * as i2 from "@angular/common";
19
- import * as i3 from "@wm/components/base";
20
- import * as i4 from "@angular/forms";
21
- import * as i5 from "ngx-bootstrap/typeahead";
22
- const _c0 = ["ulElement"];
23
- const _c1 = ["liElements"];
24
- const _c2 = ["wmSearch", ""];
25
- const _c3 = a0 => ({ customTemplate: a0 });
26
- const _c4 = (a0, a1) => ({ active: a0, "list-group-header": a1 });
27
- const _c5 = (a0, a1, a2, a3) => ({ item: a0, index: a1, match: a2, query: a3 });
28
- const _c6 = () => ({ standalone: true });
29
- const _c7 = a0 => ({ "show-btn": a0 });
30
- const _c8 = a0 => ({ "disabled": a0 });
31
- function SearchComponent_ng_template_0_Conditional_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
32
- i0.ɵɵelement(0, "img", 7);
33
- } if (rf & 2) {
34
- const model_r1 = i0.ɵɵnextContext(2).item;
35
- const ctx_r1 = i0.ɵɵnextContext();
36
- i0.ɵɵstyleProp("width", ctx_r1.imagewidth);
37
- i0.ɵɵproperty("src", model_r1.imgSrc, i0.ɵɵsanitizeUrl);
38
- } }
39
- function SearchComponent_ng_template_0_Conditional_0_Template(rf, ctx) { if (rf & 1) {
40
- i0.ɵɵelementStart(0, "a");
41
- i0.ɵɵtemplate(1, SearchComponent_ng_template_0_Conditional_0_Conditional_1_Template, 1, 3, "img", 5);
42
- i0.ɵɵelement(2, "span", 6);
43
- i0.ɵɵelementEnd();
44
- } if (rf & 2) {
45
- const ctx_r2 = i0.ɵɵnextContext();
46
- const model_r1 = ctx_r2.item;
47
- const query_r4 = ctx_r2.query;
48
- const match_r5 = ctx_r2.match;
49
- const ctx_r1 = i0.ɵɵnextContext();
50
- i0.ɵɵadvance();
51
- i0.ɵɵconditional(model_r1.imgSrc ? 1 : -1);
52
- i0.ɵɵadvance();
53
- i0.ɵɵproperty("title", model_r1.label)("innerHtml", ctx_r1.highlight(match_r5, query_r4) || model_r1.label, i0.ɵɵsanitizeHtml);
54
- } }
55
- function SearchComponent_ng_template_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
56
- i0.ɵɵelementStart(0, "a", 4);
57
- i0.ɵɵelement(1, "div", 8);
58
- i0.ɵɵelementEnd();
59
- } if (rf & 2) {
60
- const match_r5 = i0.ɵɵnextContext().match;
61
- const ctx_r1 = i0.ɵɵnextContext();
62
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(3, _c3, ctx_r1.content))("wmItemTemplate", ctx_r1.content)("userComponentParams", match_r5.item);
63
- } }
64
- function SearchComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {
65
- i0.ɵɵtemplate(0, SearchComponent_ng_template_0_Conditional_0_Template, 3, 3, "a")(1, SearchComponent_ng_template_0_Conditional_1_Template, 2, 5, "a", 4);
66
- } if (rf & 2) {
67
- const ctx_r1 = i0.ɵɵnextContext();
68
- i0.ɵɵconditional(!ctx_r1.content ? 0 : -1);
69
- i0.ɵɵadvance();
70
- i0.ɵɵconditional(ctx_r1.content ? 1 : -1);
71
- } }
72
- function SearchComponent_ng_template_2_For_3_Conditional_2_Template(rf, ctx) { if (rf & 1) {
73
- i0.ɵɵelementStart(0, "h4", 15);
74
- i0.ɵɵtext(1);
75
- i0.ɵɵelementEnd();
76
- } if (rf & 2) {
77
- const match_r7 = i0.ɵɵnextContext().$implicit;
78
- i0.ɵɵadvance();
79
- i0.ɵɵtextInterpolate(match_r7.value);
80
- } }
81
- function SearchComponent_ng_template_2_For_3_Conditional_3_Template(rf, ctx) { if (rf & 1) {
82
- i0.ɵɵelementContainer(0, 16);
83
- } if (rf & 2) {
84
- const ctx_r7 = i0.ɵɵnextContext();
85
- const match_r7 = ctx_r7.$implicit;
86
- const ɵ$index_20_r9 = ctx_r7.$index;
87
- const ctx_r9 = i0.ɵɵnextContext();
88
- const itemTemplate_r11 = ctx_r9.itemTemplate;
89
- const query_r12 = ctx_r9.query;
90
- i0.ɵɵproperty("ngTemplateOutlet", itemTemplate_r11)("ngTemplateOutletContext", i0.ɵɵpureFunction4(2, _c5, match_r7.item, ɵ$index_20_r9, match_r7, query_r12));
91
- } }
92
- function SearchComponent_ng_template_2_For_3_Template(rf, ctx) { if (rf & 1) {
93
- const _r6 = i0.ɵɵgetCurrentView();
94
- i0.ɵɵelementStart(0, "li", 14, 3);
95
- i0.ɵɵlistener("mouseenter", function SearchComponent_ng_template_2_For_3_Template_li_mouseenter_0_listener() { const match_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.typeaheadContainer.selectActive(match_r7)); })("click", function SearchComponent_ng_template_2_For_3_Template_li_click_0_listener($event) { const match_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); match_r7 && !match_r7.isHeader() && ctx_r1.typeaheadContainer.selectMatch(match_r7, $event); ctx_r1.$typeaheadEvent = $event; return i0.ɵɵresetView(ctx_r1.notifySubscriber()); });
96
- i0.ɵɵtemplate(2, SearchComponent_ng_template_2_For_3_Conditional_2_Template, 2, 1, "h4", 15)(3, SearchComponent_ng_template_2_For_3_Conditional_3_Template, 1, 7, "ng-container", 16);
97
- i0.ɵɵelementEnd();
98
- } if (rf & 2) {
99
- const match_r7 = ctx.$implicit;
100
- const ctx_r1 = i0.ɵɵnextContext(2);
101
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(3, _c4, ctx_r1.typeaheadContainer && ctx_r1.typeaheadContainer.isActive(match_r7), match_r7 && match_r7.isHeader()));
102
- i0.ɵɵadvance(2);
103
- i0.ɵɵconditional(match_r7.isHeader() ? 2 : -1);
104
- i0.ɵɵadvance();
105
- i0.ɵɵconditional(!match_r7.isHeader() ? 3 : -1);
106
- } }
107
- function SearchComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {
108
- i0.ɵɵelementStart(0, "ul", 9, 2);
109
- i0.ɵɵrepeaterCreate(2, SearchComponent_ng_template_2_For_3_Template, 4, 6, "li", 10, i0.ɵɵrepeaterTrackByIdentity);
110
- i0.ɵɵelementStart(4, "div", 11);
111
- i0.ɵɵelement(5, "span", 12);
112
- i0.ɵɵelementEnd();
113
- i0.ɵɵelementStart(6, "div", 11);
114
- i0.ɵɵelement(7, "i", 13)(8, "span", 12);
115
- i0.ɵɵelementEnd()();
116
- } if (rf & 2) {
117
- const matches_r13 = ctx.matches;
118
- const ctx_r1 = i0.ɵɵnextContext();
119
- i0.ɵɵadvance(2);
120
- i0.ɵɵrepeater(matches_r13);
121
- i0.ɵɵadvance(2);
122
- i0.ɵɵproperty("hidden", ctx_r1._loadingItems || !(ctx_r1.datacompletemsg && ctx_r1.dataProvider.isLastPage));
123
- i0.ɵɵadvance();
124
- i0.ɵɵproperty("textContent", ctx_r1.datacompletemsg);
125
- i0.ɵɵadvance();
126
- i0.ɵɵproperty("hidden", !ctx_r1._loadingItems);
127
- i0.ɵɵadvance(2);
128
- i0.ɵɵproperty("textContent", ctx_r1.loadingdatamsg);
129
- } }
130
- function SearchComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
131
- const _r14 = i0.ɵɵgetCurrentView();
132
- i0.ɵɵelementStart(0, "input", 17);
133
- i0.ɵɵtwoWayListener("ngModelChange", function SearchComponent_Conditional_4_Template_input_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.query, $event) || (ctx_r1.query = $event); return i0.ɵɵresetView($event); });
134
- i0.ɵɵlistener("input", function SearchComponent_Conditional_4_Template_input_input_0_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onInputChange($event)); })("keydown", function SearchComponent_Conditional_4_Template_input_keydown_0_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.listenQuery = true); })("keydown.enter", function SearchComponent_Conditional_4_Template_input_keydown_enter_0_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.$typeaheadEvent = $event; return i0.ɵɵresetView(ctx_r1.handleEnterEvent($event)); })("keydown.arrowdown", function SearchComponent_Conditional_4_Template_input_keydown_arrowdown_0_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.selectNext($event)); })("blur", function SearchComponent_Conditional_4_Template_input_blur_0_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.invokeOnTouched($event)); })("click", function SearchComponent_Conditional_4_Template_input_click_0_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleFocus($event)); })("focus", function SearchComponent_Conditional_4_Template_input_focus_0_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1._unsubscribeDv = false; ctx_r1.listenQuery = true; ctx_r1.handleFocus($event); return i0.ɵɵresetView(ctx_r1.invokeOnFocus($event)); })("focusout", function SearchComponent_Conditional_4_Template_input_focusout_0_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onFocusOut()); })("typeaheadLoading", function SearchComponent_Conditional_4_Template_input_typeaheadLoading_0_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1._loadingItems); })("typeaheadOnSelect", function SearchComponent_Conditional_4_Template_input_typeaheadOnSelect_0_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.typeaheadOnSelect($event)); });
135
- i0.ɵɵelementEnd();
136
- i0.ɵɵelementStart(1, "i", 18);
137
- i0.ɵɵlistener("click", function SearchComponent_Conditional_4_Template_i_click_1_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.clearSearch($event)); });
138
- i0.ɵɵelementEnd();
139
- } if (rf & 2) {
140
- const ctx_r1 = i0.ɵɵnextContext();
141
- const customItemTemplate_r15 = i0.ɵɵreference(1);
142
- const customListTemplate_r16 = i0.ɵɵreference(3);
143
- i0.ɵɵproperty("title", ctx_r1.query || "")("placeholder", ctx_r1.placeholder || "")("disabled", ctx_r1.disabled);
144
- i0.ɵɵtwoWayProperty("ngModel", ctx_r1.query);
145
- i0.ɵɵproperty("ngModelOptions", i0.ɵɵpureFunction0(23, _c6))("readonly", ctx_r1.readonly)("typeahead", ctx_r1.typeaheadDataSource)("typeaheadWaitMs", ctx_r1.debouncetime)("typeaheadItemTemplate", customItemTemplate_r15)("optionsListTemplate", customListTemplate_r16)("typeaheadMinLength", ctx_r1.minchars)("typeaheadOptionsLimit", ctx_r1.limit)("typeaheadGroupField", ctx_r1.groupby ? "groupby" : null)("typeaheadAsync", true)("typeaheadScrollable", true)("adaptivePosition", true)("typeaheadOptionsInScrollableView", ctx_r1.optionslimitinscrollableview)("dropup", ctx_r1.dropup)("tabindex", ctx_r1.tabindex);
146
- i0.ɵɵattribute("accesskey", ctx_r1.shortcutkey)("name", ctx_r1.name)("aria-label", ctx_r1.arialabel || "Search field");
147
- i0.ɵɵadvance();
148
- i0.ɵɵproperty("hidden", !ctx_r1.showClosebtn);
149
- } }
150
- function SearchComponent_Conditional_5_Conditional_6_Template(rf, ctx) { if (rf & 1) {
151
- i0.ɵɵelement(0, "span", 23);
152
- } }
153
- function SearchComponent_Conditional_5_Conditional_11_Template(rf, ctx) { if (rf & 1) {
154
- const _r18 = i0.ɵɵgetCurrentView();
155
- i0.ɵɵelementStart(0, "span", 25)(1, "form")(2, "button", 26);
156
- i0.ɵɵlistener("click", function SearchComponent_Conditional_5_Conditional_11_Template_button_click_2_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onSearchSelect($event)); });
157
- i0.ɵɵelement(3, "i");
158
- i0.ɵɵelementEnd()()();
159
- } if (rf & 2) {
160
- const ctx_r1 = i0.ɵɵnextContext(2);
161
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(5, _c8, ctx_r1.disabled));
162
- i0.ɵɵadvance(2);
163
- i0.ɵɵproperty("disabled", ctx_r1.disabled);
164
- i0.ɵɵadvance();
165
- i0.ɵɵclassMapInterpolate1("app-icon ", ctx_r1.searchiconclass, "");
166
- } }
167
- function SearchComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
168
- const _r17 = i0.ɵɵgetCurrentView();
169
- i0.ɵɵelementStart(0, "button", 19);
170
- i0.ɵɵlistener("click", function SearchComponent_Conditional_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeSearch()); });
171
- i0.ɵɵelement(1, "i");
172
- i0.ɵɵelementEnd();
173
- i0.ɵɵelementStart(2, "span", 20);
174
- i0.ɵɵtext(3, "Back button");
175
- i0.ɵɵelementEnd();
176
- i0.ɵɵelementStart(4, "input", 21);
177
- i0.ɵɵtwoWayListener("ngModelChange", function SearchComponent_Conditional_5_Template_input_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.query, $event) || (ctx_r1.query = $event); return i0.ɵɵresetView($event); });
178
- i0.ɵɵlistener("input", function SearchComponent_Conditional_5_Template_input_input_4_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onInputChange($event)); })("keydown", function SearchComponent_Conditional_5_Template_input_keydown_4_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.listenQuery = true); })("keydown.enter", function SearchComponent_Conditional_5_Template_input_keydown_enter_4_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.$typeaheadEvent = $event; return i0.ɵɵresetView(ctx_r1.handleEnterEvent($event)); })("keydown.arrowdown", function SearchComponent_Conditional_5_Template_input_keydown_arrowdown_4_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.selectNext($event)); })("blur", function SearchComponent_Conditional_5_Template_input_blur_4_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.invokeOnTouched($event); return i0.ɵɵresetView(ctx_r1.onFocusOut()); })("click", function SearchComponent_Conditional_5_Template_input_click_4_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleFocus($event)); })("focus", function SearchComponent_Conditional_5_Template_input_focus_4_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1._unsubscribeDv = false; ctx_r1.listenQuery = true; ctx_r1.handleFocus($event); return i0.ɵɵresetView(ctx_r1.invokeOnFocus($event)); })("typeaheadLoading", function SearchComponent_Conditional_5_Template_input_typeaheadLoading_4_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1._loadingItems); })("typeaheadOnSelect", function SearchComponent_Conditional_5_Template_input_typeaheadOnSelect_4_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.typeaheadOnSelect($event)); });
179
- i0.ɵɵelementEnd();
180
- i0.ɵɵelement(5, "input", 22);
181
- i0.ɵɵtemplate(6, SearchComponent_Conditional_5_Conditional_6_Template, 1, 0, "span", 23);
182
- i0.ɵɵelementStart(7, "button", 24);
183
- i0.ɵɵlistener("click", function SearchComponent_Conditional_5_Template_button_click_7_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.clearSearch($event, true)); });
184
- i0.ɵɵelement(8, "i");
185
- i0.ɵɵelementEnd();
186
- i0.ɵɵelementStart(9, "span", 20);
187
- i0.ɵɵtext(10, "Clear button");
188
- i0.ɵɵelementEnd();
189
- i0.ɵɵtemplate(11, SearchComponent_Conditional_5_Conditional_11_Template, 4, 7, "span", 25);
190
- } if (rf & 2) {
191
- const ctx_r1 = i0.ɵɵnextContext();
192
- const customItemTemplate_r15 = i0.ɵɵreference(1);
193
- const customListTemplate_r16 = i0.ɵɵreference(3);
194
- i0.ɵɵadvance();
195
- i0.ɵɵclassMapInterpolate1("app-icon ", ctx_r1.backsearchiconclass, "");
196
- i0.ɵɵadvance(3);
197
- i0.ɵɵproperty("title", ctx_r1.query || "")("placeholder", ctx_r1.placeholder || "")("container", ctx_r1.containerTarget || ".wm-app")("disabled", ctx_r1.disabled);
198
- i0.ɵɵtwoWayProperty("ngModel", ctx_r1.query);
199
- i0.ɵɵproperty("ngModelOptions", i0.ɵɵpureFunction0(32, _c6))("readonly", ctx_r1.readonly)("typeahead", ctx_r1.typeaheadDataSource)("typeaheadWaitMs", ctx_r1.debouncetime)("typeaheadItemTemplate", customItemTemplate_r15)("optionsListTemplate", customListTemplate_r16)("typeaheadMinLength", ctx_r1.minchars)("typeaheadOptionsLimit", ctx_r1.limit)("typeaheadGroupField", ctx_r1.groupby ? "groupby" : null)("typeaheadAsync", true)("typeaheadScrollable", true)("adaptivePosition", true)("typeaheadOptionsInScrollableView", ctx_r1.optionslimitinscrollableview)("tabindex", ctx_r1.tabindex)("dropup", ctx_r1.dropup);
200
- i0.ɵɵattribute("accesskey", ctx_r1.shortcutkey)("name", ctx_r1.name)("aria-label", ctx_r1.arialabel || "Search field");
201
- i0.ɵɵadvance(2);
202
- i0.ɵɵconditional(ctx_r1._loadingItems ? 6 : -1);
203
- i0.ɵɵadvance();
204
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(33, _c7, ctx_r1.isQueryEntered()));
205
- i0.ɵɵadvance();
206
- i0.ɵɵclassMapInterpolate1("app-icon ", ctx_r1.clearsearchiconclass, "");
207
- i0.ɵɵadvance(3);
208
- i0.ɵɵconditional(ctx_r1.showsearchicon ? 11 : -1);
209
- } }
17
+ import * as i3 from "@angular/forms";
18
+ import * as i4 from "ngx-bootstrap/typeahead";
210
19
  const WIDGET_CONFIG = { widgetType: 'wm-search', hostClass: 'input-group' };
211
20
  export class SearchComponent extends DatasetAwareFormComponent {
212
21
  static { this.initializeProps = registerProps(); }
@@ -888,54 +697,39 @@ export class SearchComponent extends DatasetAwareFormComponent {
888
697
  }
889
698
  super.onPropertyChange(key, nv, ov);
890
699
  }
891
- static { this.ɵfac = function SearchComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SearchComponent)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i1.App), i0.ɵɵinjectAttribute('datavalue.bind'), i0.ɵɵinjectAttribute('dataset.bind'), i0.ɵɵdirectiveInject('EXPLICIT_CONTEXT', 8)); }; }
892
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SearchComponent, selectors: [["", "wmSearch", ""]], viewQuery: function SearchComponent_Query(rf, ctx) { if (rf & 1) {
893
- i0.ɵɵviewQuery(TypeaheadDirective, 5);
894
- i0.ɵɵviewQuery(_c0, 5);
895
- i0.ɵɵviewQuery(_c1, 5);
896
- } if (rf & 2) {
897
- let _t;
898
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.typeahead = _t.first);
899
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.ulElement = _t.first);
900
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.liElements = _t);
901
- } }, standalone: true, features: [i0.ɵɵProvidersFeature([
902
- provideAs(SearchComponent, NG_VALUE_ACCESSOR, true),
903
- provideAs(SearchComponent, NG_VALIDATORS, true),
904
- provideAsWidgetRef(SearchComponent)
905
- ]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature], attrs: _c2, decls: 6, vars: 1, consts: [["customItemTemplate", ""], ["customListTemplate", ""], ["ulElement", ""], ["liElements", ""], ["partialContainer", "", 3, "ngClass", "wmItemTemplate", "userComponentParams"], ["alt", "Search", 3, "src", "width"], [3, "title", "innerHtml"], ["alt", "Search", 3, "src"], ["partial-container-target", ""], ["scrollable", "", 1, "app-search", "dropdown-menu"], [3, "ngClass"], [1, "status", 3, "hidden"], [3, "textContent"], [1, "fa", "fa-circle-o-notch", "fa-spin"], [3, "mouseenter", "click", "ngClass"], [1, "group-title"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"], ["type", "text", "focus-target", "", "container", "body", "autocomplete", "off", "typeaheadOptionField", "label", 1, "app-textbox", "form-control", "list-of-objs", "app-search-input", 3, "ngModelChange", "input", "keydown", "keydown.enter", "keydown.arrowdown", "blur", "click", "focus", "focusout", "typeaheadLoading", "typeaheadOnSelect", "title", "placeholder", "disabled", "ngModel", "ngModelOptions", "readonly", "typeahead", "typeaheadWaitMs", "typeaheadItemTemplate", "optionsListTemplate", "typeaheadMinLength", "typeaheadOptionsLimit", "typeaheadGroupField", "typeaheadAsync", "typeaheadScrollable", "adaptivePosition", "typeaheadOptionsInScrollableView", "dropup", "tabindex"], [1, "btn-close", "wi", "wi-cancel", 3, "click", "hidden"], ["type", "button", "aria-hidden", "true", 1, "btn", "btn-icon", "form-control-feedback", "back-btn", 3, "click"], [1, "sr-only"], ["type", "text", "focus-target", "", "autocomplete", "off", "typeaheadOptionField", "label", 1, "app-textbox", "form-control", "list-of-objs", "app-search-input", 3, "ngModelChange", "input", "keydown", "keydown.enter", "keydown.arrowdown", "blur", "click", "focus", "typeaheadLoading", "typeaheadOnSelect", "title", "placeholder", "container", "disabled", "ngModel", "ngModelOptions", "readonly", "typeahead", "typeaheadWaitMs", "typeaheadItemTemplate", "optionsListTemplate", "typeaheadMinLength", "typeaheadOptionsLimit", "typeaheadGroupField", "typeaheadAsync", "typeaheadScrollable", "adaptivePosition", "typeaheadOptionsInScrollableView", "tabindex", "dropup"], ["ng-model", "proxyModel", "ng-required", "required", "tabindex", "-1", "aria-hidden", "true", 1, "model-holder"], ["aria-hidden", "true", 1, "fa", "fa-circle-o-notch", "fa-spin", "form-control-feedback"], ["type", "button", 1, "btn", "btn-icon", "form-control-feedback", "clear-btn", 3, "click", "ngClass"], [1, "input-group-addon", 3, "ngClass"], ["title", "Search", "type", "submit", 1, "app-search-button", "btn", "btn-icon", 3, "click", "disabled"]], template: function SearchComponent_Template(rf, ctx) { if (rf & 1) {
906
- i0.ɵɵtemplate(0, SearchComponent_ng_template_0_Template, 2, 2, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor)(2, SearchComponent_ng_template_2_Template, 9, 4, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor)(4, SearchComponent_Conditional_4_Template, 2, 24)(5, SearchComponent_Conditional_5_Template, 12, 35);
907
- } if (rf & 2) {
908
- i0.ɵɵadvance(4);
909
- i0.ɵɵconditional(ctx.navsearchbar ? 4 : 5);
910
- } }, dependencies: [CommonModule, i2.NgClass, i2.NgTemplateOutlet, WmComponentsModule, i3.ItemTemplateDirective, i3.PartialParamHandlerDirective, i3.PartialContainerDirective, i3.TextContentDirective, FormsModule, i4.ɵNgNoValidate, i4.DefaultValueAccessor, i4.NgControlStatus, i4.NgControlStatusGroup, i4.NgModel, i4.NgForm, ScrollableDirective, TypeaheadModule, i5.TypeaheadDirective], encapsulation: 2 }); }
700
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchComponent, deps: [{ token: i0.Injector }, { token: i1.App }, { token: 'datavalue.bind', attribute: true }, { token: 'dataset.bind', attribute: true }, { token: 'EXPLICIT_CONTEXT', optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
701
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: SearchComponent, isStandalone: true, selector: "[wmSearch]", providers: [
702
+ provideAs(SearchComponent, NG_VALUE_ACCESSOR, true),
703
+ provideAs(SearchComponent, NG_VALIDATORS, true),
704
+ provideAsWidgetRef(SearchComponent)
705
+ ], viewQueries: [{ propertyName: "typeahead", first: true, predicate: TypeaheadDirective, descendants: true }, { propertyName: "ulElement", first: true, predicate: ["ulElement"], descendants: true }, { propertyName: "liElements", predicate: ["liElements"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #customItemTemplate let-model=\"item\" let-index=\"index\" let-query=\"query\" let-match=\"match\">\n <!-- Default item template -->\n @if (!content) {\n <a>\n @if (model.imgSrc) {\n <img [src]=\"model.imgSrc\" alt=\"Search\" [style.width]=\"imagewidth\">\n }\n <span [title]=\"model.label\" [innerHtml]=\"highlight(match, query) || model.label\"></span>\n </a>\n }\n <!-- Custom partial template -->\n @if (content) {\n <a [ngClass]=\"{customTemplate: content}\" partialContainer [wmItemTemplate]=\"content\" [userComponentParams]=\"match.item\">\n <div partial-container-target></div>\n </a>\n }\n</ng-template>\n\n<ng-template #customListTemplate let-matches=\"matches\" let-itemTemplate=\"itemTemplate\" let-query=\"query\">\n <ul #ulElement class=\"app-search dropdown-menu\" scrollable>\n @for (match of matches; track match; let i = $index) {\n <li #liElements [ngClass]=\"{active: typeaheadContainer && typeaheadContainer.isActive(match), 'list-group-header': match && match.isHeader()}\"\n (mouseenter)=\"typeaheadContainer.selectActive(match);\"\n (click)=\"match && !match.isHeader() && typeaheadContainer.selectMatch(match, $event); $typeaheadEvent = $event; notifySubscriber();\">\n <!-- itemTemplate comes from the <input> -->\n @if (match.isHeader()) {\n <h4 class=\"group-title\">{{match.value}}</h4>\n }\n @if (!match.isHeader()) {\n <ng-container [ngTemplateOutlet]=\"itemTemplate\"\n [ngTemplateOutletContext]=\"{item: match.item, index: i, match: match, query: query}\">\n </ng-container>\n }\n </li>\n }\n <div class=\"status\" [hidden]=\"_loadingItems || !(datacompletemsg && dataProvider.isLastPage)\">\n <span [textContent]=\"datacompletemsg\"></span>\n </div>\n <div class=\"status\" [hidden]=\"!_loadingItems\">\n <i class=\"fa fa-circle-o-notch fa-spin\"></i>\n <span [textContent]=\"loadingdatamsg\"></span>\n </div>\n </ul>\n</ng-template>\n\n<!--This template is for search inside mobile navbar.-->\n@if (navsearchbar) {\n <input [title]=\"query || ''\" type=\"text\" class=\"app-textbox form-control list-of-objs app-search-input\" [placeholder]=\"placeholder || ''\"\n focus-target\n container=\"body\"\n [disabled]=\"disabled\"\n [attr.accesskey]=\"shortcutkey\"\n autocomplete=\"off\"\n [(ngModel)]=\"query\"\n [ngModelOptions]=\"{standalone: true}\"\n [readonly]=\"readonly\"\n [typeahead]=\"typeaheadDataSource\"\n [typeaheadWaitMs]=\"debouncetime\"\n [typeaheadItemTemplate]=\"customItemTemplate\"\n [optionsListTemplate]=\"customListTemplate\"\n (input)=\"onInputChange($event)\"\n (keydown)=\"listenQuery = true\"\n (keydown.enter)=\"$typeaheadEvent = $event;handleEnterEvent($event)\"\n (keydown.arrowdown)=\"selectNext($event)\"\n (blur)=\"invokeOnTouched($event)\"\n (click)=\"handleFocus($event);\"\n (focus)=\"_unsubscribeDv = false; listenQuery = true; handleFocus($event); invokeOnFocus($event);\"\n (focusout)=\"onFocusOut()\"\n [typeaheadMinLength]=\"minchars\"\n [typeaheadOptionsLimit]=\"limit\"\n (typeaheadLoading)=\"_loadingItems\"\n (typeaheadOnSelect)=\"typeaheadOnSelect($event)\"\n typeaheadOptionField=\"label\"\n [typeaheadGroupField]=\"groupby ? 'groupby' : null\"\n [typeaheadAsync]=\"true\"\n [typeaheadScrollable]=\"true\"\n [adaptivePosition]=\"true\"\n [typeaheadOptionsInScrollableView]=\"optionslimitinscrollableview\"\n [dropup]=\"dropup\"\n [tabindex]=\"tabindex\"\n [attr.name]=\"name\"\n [attr.aria-label]=\"arialabel || 'Search field'\"/>\n <i class=\"btn-close wi wi-cancel\" [hidden]=\"!showClosebtn\" (click)=\"clearSearch($event);\"></i>\n} @else {\n <button type=\"button\" class=\"btn btn-icon form-control-feedback back-btn\" aria-hidden=\"true\" (click)=\"closeSearch()\"><i class=\"app-icon {{backsearchiconclass}}\"></i></button>\n <span class=\"sr-only\">Back button</span>\n <input [title]=\"query || ''\" type=\"text\" class=\"app-textbox form-control list-of-objs app-search-input\" [placeholder]=\"placeholder || ''\"\n focus-target\n [container]=\"containerTarget || '.wm-app'\"\n [disabled]=\"disabled\"\n [attr.accesskey]=\"shortcutkey\"\n autocomplete=\"off\"\n [(ngModel)]=\"query\"\n [ngModelOptions]=\"{standalone: true}\"\n [readonly]=\"readonly\"\n [typeahead]=\"typeaheadDataSource\"\n [typeaheadWaitMs]=\"debouncetime\"\n [typeaheadItemTemplate]=\"customItemTemplate\"\n [optionsListTemplate]=\"customListTemplate\"\n (input)=\"onInputChange($event)\"\n (keydown)=\"listenQuery = true\"\n (keydown.enter)=\"$typeaheadEvent = $event;handleEnterEvent($event)\"\n (keydown.arrowdown)=\"selectNext($event)\"\n (blur)=\"invokeOnTouched($event); onFocusOut()\"\n (click)=\"handleFocus($event);\"\n (focus)=\"_unsubscribeDv = false; listenQuery = true; handleFocus($event); invokeOnFocus($event)\"\n [typeaheadMinLength]=\"minchars\"\n [typeaheadOptionsLimit]=\"limit\"\n (typeaheadLoading)=\"_loadingItems\"\n (typeaheadOnSelect)=\"typeaheadOnSelect($event)\"\n typeaheadOptionField=\"label\"\n [typeaheadGroupField]=\"groupby ? 'groupby' : null\"\n [typeaheadAsync]=\"true\"\n [typeaheadScrollable]=\"true\"\n [adaptivePosition]=\"true\"\n [typeaheadOptionsInScrollableView]=\"optionslimitinscrollableview\"\n [tabindex]=\"tabindex\"\n [dropup]=\"dropup\"\n [attr.name]=\"name\"\n [attr.aria-label]=\"arialabel || 'Search field'\">\n <input class=\"model-holder\" ng-model=\"proxyModel\" ng-required=\"required\" tabindex=\"-1\" aria-hidden=\"true\">\n @if (_loadingItems) {\n <span aria-hidden=\"true\" class=\"fa fa-circle-o-notch fa-spin form-control-feedback\"></span>\n }\n <button type=\"button\" class=\"btn btn-icon form-control-feedback clear-btn\" [ngClass]=\"{'show-btn': isQueryEntered()}\" (click)=\"clearSearch($event, true)\"><i class=\"app-icon {{clearsearchiconclass}}\"></i></button>\n <span class=\"sr-only\">Clear button</span>\n @if (showsearchicon) {\n <span [ngClass]=\"{'disabled': disabled}\" class=\"input-group-addon\">\n <form>\n <button title=\"Search\" [disabled]=\"disabled\" class=\"app-search-button btn btn-icon\" type=\"submit\"\n (click)=\"onSearchSelect($event)\">\n <i class=\"app-icon {{searchiconclass}}\"></i></button>\n </form>\n </span>\n }\n }\n <!--This template is for both web and fullscreen mode in mobile.-->\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: ScrollableDirective, selector: "[scrollable]" }, { kind: "ngmodule", type: TypeaheadModule }, { kind: "directive", type: i4.TypeaheadDirective, selector: "[typeahead]", inputs: ["typeahead", "typeaheadMinLength", "adaptivePosition", "isAnimated", "typeaheadWaitMs", "typeaheadOptionsLimit", "typeaheadOptionField", "typeaheadGroupField", "typeaheadOrderBy", "typeaheadAsync", "typeaheadLatinize", "typeaheadSingleWords", "typeaheadWordDelimiters", "typeaheadMultipleSearch", "typeaheadMultipleSearchDelimiters", "typeaheadPhraseDelimiters", "typeaheadItemTemplate", "optionsListTemplate", "typeaheadScrollable", "typeaheadOptionsInScrollableView", "typeaheadHideResultsOnBlur", "typeaheadSelectFirstItem", "typeaheadIsFirstItemActive", "container", "dropup"], outputs: ["typeaheadLoading", "typeaheadNoResults", "typeaheadOnSelect", "typeaheadOnPreview", "typeaheadOnBlur"], exportAs: ["bs-typeahead"] }, { kind: "directive", type: TextContentDirective, selector: "[textContent]", inputs: ["textContent"] }, { kind: "directive", type: ItemTemplateDirective, selector: "[wmItemTemplate]", inputs: ["userComponentParams", "wmItemTemplate"], exportAs: ["itemTemplateRef"] }, { kind: "directive", type: PartialParamHandlerDirective, selector: "[partialContainer]" }, { kind: "directive", type: PartialContainerDirective, selector: "[partialContainer]" }] }); }
911
706
  }
912
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SearchComponent, [{
913
- type: Component,
914
- args: [{ standalone: true, imports: [CommonModule, WmComponentsModule, FormsModule, ScrollableDirective, TypeaheadModule], selector: '[wmSearch]', providers: [
915
- provideAs(SearchComponent, NG_VALUE_ACCESSOR, true),
916
- provideAs(SearchComponent, NG_VALIDATORS, true),
917
- provideAsWidgetRef(SearchComponent)
918
- ], template: "<ng-template #customItemTemplate let-model=\"item\" let-index=\"index\" let-query=\"query\" let-match=\"match\">\n <!-- Default item template -->\n @if (!content) {\n <a>\n @if (model.imgSrc) {\n <img [src]=\"model.imgSrc\" alt=\"Search\" [style.width]=\"imagewidth\">\n }\n <span [title]=\"model.label\" [innerHtml]=\"highlight(match, query) || model.label\"></span>\n </a>\n }\n <!-- Custom partial template -->\n @if (content) {\n <a [ngClass]=\"{customTemplate: content}\" partialContainer [wmItemTemplate]=\"content\" [userComponentParams]=\"match.item\">\n <div partial-container-target></div>\n </a>\n }\n</ng-template>\n\n<ng-template #customListTemplate let-matches=\"matches\" let-itemTemplate=\"itemTemplate\" let-query=\"query\">\n <ul #ulElement class=\"app-search dropdown-menu\" scrollable>\n @for (match of matches; track match; let i = $index) {\n <li #liElements [ngClass]=\"{active: typeaheadContainer && typeaheadContainer.isActive(match), 'list-group-header': match && match.isHeader()}\"\n (mouseenter)=\"typeaheadContainer.selectActive(match);\"\n (click)=\"match && !match.isHeader() && typeaheadContainer.selectMatch(match, $event); $typeaheadEvent = $event; notifySubscriber();\">\n <!-- itemTemplate comes from the <input> -->\n @if (match.isHeader()) {\n <h4 class=\"group-title\">{{match.value}}</h4>\n }\n @if (!match.isHeader()) {\n <ng-container [ngTemplateOutlet]=\"itemTemplate\"\n [ngTemplateOutletContext]=\"{item: match.item, index: i, match: match, query: query}\">\n </ng-container>\n }\n </li>\n }\n <div class=\"status\" [hidden]=\"_loadingItems || !(datacompletemsg && dataProvider.isLastPage)\">\n <span [textContent]=\"datacompletemsg\"></span>\n </div>\n <div class=\"status\" [hidden]=\"!_loadingItems\">\n <i class=\"fa fa-circle-o-notch fa-spin\"></i>\n <span [textContent]=\"loadingdatamsg\"></span>\n </div>\n </ul>\n</ng-template>\n\n<!--This template is for search inside mobile navbar.-->\n@if (navsearchbar) {\n <input [title]=\"query || ''\" type=\"text\" class=\"app-textbox form-control list-of-objs app-search-input\" [placeholder]=\"placeholder || ''\"\n focus-target\n container=\"body\"\n [disabled]=\"disabled\"\n [attr.accesskey]=\"shortcutkey\"\n autocomplete=\"off\"\n [(ngModel)]=\"query\"\n [ngModelOptions]=\"{standalone: true}\"\n [readonly]=\"readonly\"\n [typeahead]=\"typeaheadDataSource\"\n [typeaheadWaitMs]=\"debouncetime\"\n [typeaheadItemTemplate]=\"customItemTemplate\"\n [optionsListTemplate]=\"customListTemplate\"\n (input)=\"onInputChange($event)\"\n (keydown)=\"listenQuery = true\"\n (keydown.enter)=\"$typeaheadEvent = $event;handleEnterEvent($event)\"\n (keydown.arrowdown)=\"selectNext($event)\"\n (blur)=\"invokeOnTouched($event)\"\n (click)=\"handleFocus($event);\"\n (focus)=\"_unsubscribeDv = false; listenQuery = true; handleFocus($event); invokeOnFocus($event);\"\n (focusout)=\"onFocusOut()\"\n [typeaheadMinLength]=\"minchars\"\n [typeaheadOptionsLimit]=\"limit\"\n (typeaheadLoading)=\"_loadingItems\"\n (typeaheadOnSelect)=\"typeaheadOnSelect($event)\"\n typeaheadOptionField=\"label\"\n [typeaheadGroupField]=\"groupby ? 'groupby' : null\"\n [typeaheadAsync]=\"true\"\n [typeaheadScrollable]=\"true\"\n [adaptivePosition]=\"true\"\n [typeaheadOptionsInScrollableView]=\"optionslimitinscrollableview\"\n [dropup]=\"dropup\"\n [tabindex]=\"tabindex\"\n [attr.name]=\"name\"\n [attr.aria-label]=\"arialabel || 'Search field'\"/>\n <i class=\"btn-close wi wi-cancel\" [hidden]=\"!showClosebtn\" (click)=\"clearSearch($event);\"></i>\n} @else {\n <button type=\"button\" class=\"btn btn-icon form-control-feedback back-btn\" aria-hidden=\"true\" (click)=\"closeSearch()\"><i class=\"app-icon {{backsearchiconclass}}\"></i></button>\n <span class=\"sr-only\">Back button</span>\n <input [title]=\"query || ''\" type=\"text\" class=\"app-textbox form-control list-of-objs app-search-input\" [placeholder]=\"placeholder || ''\"\n focus-target\n [container]=\"containerTarget || '.wm-app'\"\n [disabled]=\"disabled\"\n [attr.accesskey]=\"shortcutkey\"\n autocomplete=\"off\"\n [(ngModel)]=\"query\"\n [ngModelOptions]=\"{standalone: true}\"\n [readonly]=\"readonly\"\n [typeahead]=\"typeaheadDataSource\"\n [typeaheadWaitMs]=\"debouncetime\"\n [typeaheadItemTemplate]=\"customItemTemplate\"\n [optionsListTemplate]=\"customListTemplate\"\n (input)=\"onInputChange($event)\"\n (keydown)=\"listenQuery = true\"\n (keydown.enter)=\"$typeaheadEvent = $event;handleEnterEvent($event)\"\n (keydown.arrowdown)=\"selectNext($event)\"\n (blur)=\"invokeOnTouched($event); onFocusOut()\"\n (click)=\"handleFocus($event);\"\n (focus)=\"_unsubscribeDv = false; listenQuery = true; handleFocus($event); invokeOnFocus($event)\"\n [typeaheadMinLength]=\"minchars\"\n [typeaheadOptionsLimit]=\"limit\"\n (typeaheadLoading)=\"_loadingItems\"\n (typeaheadOnSelect)=\"typeaheadOnSelect($event)\"\n typeaheadOptionField=\"label\"\n [typeaheadGroupField]=\"groupby ? 'groupby' : null\"\n [typeaheadAsync]=\"true\"\n [typeaheadScrollable]=\"true\"\n [adaptivePosition]=\"true\"\n [typeaheadOptionsInScrollableView]=\"optionslimitinscrollableview\"\n [tabindex]=\"tabindex\"\n [dropup]=\"dropup\"\n [attr.name]=\"name\"\n [attr.aria-label]=\"arialabel || 'Search field'\">\n <input class=\"model-holder\" ng-model=\"proxyModel\" ng-required=\"required\" tabindex=\"-1\" aria-hidden=\"true\">\n @if (_loadingItems) {\n <span aria-hidden=\"true\" class=\"fa fa-circle-o-notch fa-spin form-control-feedback\"></span>\n }\n <button type=\"button\" class=\"btn btn-icon form-control-feedback clear-btn\" [ngClass]=\"{'show-btn': isQueryEntered()}\" (click)=\"clearSearch($event, true)\"><i class=\"app-icon {{clearsearchiconclass}}\"></i></button>\n <span class=\"sr-only\">Clear button</span>\n @if (showsearchicon) {\n <span [ngClass]=\"{'disabled': disabled}\" class=\"input-group-addon\">\n <form>\n <button title=\"Search\" [disabled]=\"disabled\" class=\"app-search-button btn btn-icon\" type=\"submit\"\n (click)=\"onSearchSelect($event)\">\n <i class=\"app-icon {{searchiconclass}}\"></i></button>\n </form>\n </span>\n }\n }\n <!--This template is for both web and fullscreen mode in mobile.-->\n" }]
919
- }], () => [{ type: i0.Injector }, { type: i1.App }, { type: undefined, decorators: [{
920
- type: Attribute,
921
- args: ['datavalue.bind']
922
- }] }, { type: undefined, decorators: [{
923
- type: Attribute,
924
- args: ['dataset.bind']
925
- }] }, { type: undefined, decorators: [{
926
- type: Inject,
927
- args: ['EXPLICIT_CONTEXT']
928
- }, {
929
- type: Optional
930
- }] }], { typeahead: [{
931
- type: ViewChild,
932
- args: [TypeaheadDirective]
933
- }], ulElement: [{
934
- type: ViewChild,
935
- args: ['ulElement']
936
- }], liElements: [{
937
- type: ViewChildren,
938
- args: ['liElements']
939
- }] }); })();
940
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SearchComponent, { className: "SearchComponent", filePath: "search.component.ts", lineNumber: 72 }); })();
941
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9iYXNpYy9zZWFyY2gvc3JjL3NlYXJjaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvYmFzaWMvc2VhcmNoL3NyYy9zZWFyY2guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBR0gsU0FBUyxFQUNULFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUNOLFFBQVEsRUFFUixRQUFRLEVBQ1IsU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGFBQWEsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRWhFLE9BQU8sRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUMsTUFBTSxFQUFFLFFBQVEsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRWhELE9BQU8sRUFBOEIsa0JBQWtCLEVBQWtCLGVBQWUsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRXpILE9BQU8sRUFBQyxRQUFRLEVBQUUsdUJBQXVCLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUM1RyxPQUFPLEVBQ0gs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LHdGQTZFVCxnQkFBZ0Isd0JBQ2hCLGNBQWMsd0JBQ2pCLGtCQUFrQjtvRUEvRXJCLGVBQWU7MkJBbUNiLGtCQUFrQjs7Ozs7Ozs7Z0VBekNsQjtnQkFDUCxTQUFTLENBQUMsZUFBZSxFQUFFLGlCQUFpQixFQUFFLElBQUksQ0FBQztnQkFDbkQsU0FBUyxDQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDO2dCQUMvQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUM7YUFDdEM7WUNjSCxBQXJDRixBQTVCQSxBQWxCQSxpSEFBd0csb0dBa0JDLGtEQTRCckYsbURBcUNYOztZQXJDVCxlQXlGRztZQXpGSCwwQ0F5Rkc7NEJEekVTLFlBQVksbUNBQUUsa0JBQWtCLG9IQUFFLFdBQVcsaUhBQUUsbUJBQW1CLEVBQUUsZUFBZTs7aUZBU2xGLGVBQWU7Y0FYM0IsU0FBUzs2QkFDSSxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGVBQWUsQ0FBQyxZQUNsRixZQUFZLGFBRVg7b0JBQ1AsU0FBUyxrQkFBa0IsaUJBQWlCLEVBQUUsSUFBSSxDQUFDO29CQUNuRCxTQUFTLGtCQUFrQixhQUFhLEVBQUUsSUFBSSxDQUFDO29CQUMvQyxrQkFBa0IsaUJBQWlCO2lCQUN0Qzs7c0JBK0VJLFNBQVM7dUJBQUMsZ0JBQWdCOztzQkFDMUIsU0FBUzt1QkFBQyxjQUFjOztzQkFDeEIsTUFBTTt1QkFBQyxrQkFBa0I7O3NCQUFHLFFBQVE7cUJBNUNWLFNBQVM7a0JBQXZDLFNBQVM7bUJBQUMsa0JBQWtCO1lBQ0wsU0FBUztrQkFBaEMsU0FBUzttQkFBQyxXQUFXO1lBQ00sVUFBVTtrQkFBckMsWUFBWTttQkFBQyxZQUFZOztrRkFyQ2pCLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgV21Db21wb25lbnRzTW9kdWxlIH0gZnJvbSBcIkB3bS9jb21wb25lbnRzL2Jhc2VcIjtcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2Nyb2xsYWJsZURpcmVjdGl2ZSB9IGZyb20gJy4vc2Nyb2xsYWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdDaGVja2VkLFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQXR0cmlidXRlLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgUXVlcnlMaXN0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge05HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7ZnJvbSwgT2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaWx0ZXIsIG1lcmdlTWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7VHlwZWFoZWFkQ29udGFpbmVyQ29tcG9uZW50LCBUeXBlYWhlYWREaXJlY3RpdmUsIFR5cGVhaGVhZE1hdGNoLCBUeXBlYWhlYWRNb2R1bGV9IGZyb20gJ25neC1ib290c3RyYXAvdHlwZWFoZWFkJztcblxuaW1wb3J0IHthZGRDbGFzcywgYWRqdXN0Q29udGFpbmVyUG9zaXRpb24sIEFwcCwgRGF0YVNvdXJjZSwgaXNEZWZpbmVkLCBpc01vYmlsZSwgdG9Cb29sZWFufSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQge1xuICAgIEFMTEZJRUxEUyxcbiAgICBjb252ZXJ0RGF0YVRvT2JqZWN0LFxuICAgIERhdGFTZXRJdGVtLFxuICAgIGV4dHJhY3REYXRhQXNBcnJheSxcbiAgICBnZXRDb250YWluZXJUYXJnZXRDbGFzcyxcbiAgICBnZXRVbmlxT2Jqc0J5RGF0YUZpZWxkLFxuICAgIHByb3ZpZGVBcyxcbiAgICBwcm92aWRlQXNXaWRnZXRSZWYsXG4gICAgc3R5bGVyLFxuICAgIHRyYW5zZm9ybUZvcm1EYXRhXG59IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2UnO1xuaW1wb3J0IHtEYXRhc2V0QXdhcmVGb3JtQ29tcG9uZW50fSBmcm9tICdAd20vY29tcG9uZW50cy9pbnB1dCc7XG5cbmltcG9ydCB7cmVnaXN0ZXJQcm9wc30gZnJvbSAnLi9zZWFyY2gucHJvcHMnO1xuaW1wb3J0IHtEYXRhUHJvdmlkZXIsIElEYXRhUHJvdmlkZXIsIElEYXRhUHJvdmlkZXJDb25maWd9IGZyb20gJy4vZGF0YS1wcm92aWRlci9kYXRhLXByb3ZpZGVyJztcbmltcG9ydCB7XG4gICAgZGVib3VuY2UsXG4gICAgZmluZCxcbiAgICBnZXQsXG4gICAgaW5jbHVkZXMsXG4gICAgaXNBcnJheSxcbiAgICBpc0VtcHR5LFxuICAgIGlzRXF1YWwsXG4gICAgaXNPYmplY3QsXG4gICAgaXNVbmRlZmluZWQsXG4gICAgbWFwLFxuICAgIHNwbGl0LFxuICAgIHRvU3RyaW5nLFxuICAgIHRyaW1cbn0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5jb25zdCBXSURHRVRfQ09ORklHID0geyB3aWRnZXRUeXBlOiAnd20tc2VhcmNoJywgaG9zdENsYXNzOiAnaW5wdXQtZ3JvdXAnIH07XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBXbUNvbXBvbmVudHNNb2R1bGUsIEZvcm1zTW9kdWxlLCBTY3JvbGxhYmxlRGlyZWN0aXZlLCBUeXBlYWhlYWRNb2R1bGVdLFxuICAgIHNlbGVjdG9yOiAnW3dtU2VhcmNoXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaC5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHByb3ZpZGVBcyhTZWFyY2hDb21wb25lbnQsIE5HX1ZBTFVFX0FDQ0VTU09SLCB0cnVlKSxcbiAgICAgICAgcHJvdmlkZUFzKFNlYXJjaENvbXBvbmVudCwgTkdfVkFMSURBVE9SUywgdHJ1ZSksXG4gICAgICAgIHByb3ZpZGVBc1dpZGdldFJlZihTZWFyY2hDb21wb25lbnQpXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBTZWFyY2hDb21wb25lbnQgZXh0ZW5kcyBEYXRhc2V0QXdhcmVGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBBZnRlclZpZXdDaGVja2VkIHtcbiAgICBzdGF0aWMgaW5pdGlhbGl6ZVByb3BzID0gcmVnaXN0ZXJQcm9wcygpO1xuICAgIHB1YmxpYyBjYXNlc2Vuc2l0aXZlOiBib29sZWFuO1xuICAgIHB1YmxpYyBzZWFyY2hrZXk6IHN0cmluZztcbiAgICBwdWJsaWMgcXVlcnlNb2RlbDogQXJyYXk8RGF0YVNldEl0ZW0+IHwgc3RyaW5nO1xuICAgIHB1YmxpYyBxdWVyeSA9ICcnO1xuICAgIHB1YmxpYyBsaW1pdDogYW55O1xuICAgIHB1YmxpYyBzaG93c2VhcmNoaWNvbjogYm9vbGVhbjtcbiAgICBwdWJsaWMgbWluY2hhcnM6IG51bWJlcjtcbiAgICBwdWJsaWMgdHlwZTogc3RyaW5nO1xuICAgIHB1YmxpYyBuYXZzZWFyY2hiYXI6IGFueTtcbiAgICBwdWJsaWMgZGVib3VuY2V0aW1lOiBudW1iZXI7XG4gICAgcHVibGljIGhpbnQ6IHN0cmluZztcbiAgICBwdWJsaWMgYXJpYWxhYmVsOiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIGFwcDogQXBwO1xuICAgIHByaXZhdGUgdHlwZWFoZWFkRGF0YVNvdXJjZTogT2JzZXJ2YWJsZTxhbnk+O1xuICAgIHByaXZhdGUgcGFnZXNpemU6IGFueTtcbiAgICBwcml2YXRlIHBhZ2UgPSAxO1xuICAgIHB1YmxpYyBfbG9hZGluZ0l0ZW1zOiBib29sZWFuO1xuICAgIHByaXZhdGUgZGF0YVByb3ZpZGVyOiBJRGF0YVByb3ZpZGVyO1xuICAgIHByaXZhdGUgcmVzdWx0OiBBcnJheTxhbnk+OyAvLyBjb250YWlucyB0aGUgc2VhcmNoIHJlc3VsdCBpLmUuIG1hdGNoZXNcbiAgICBwcml2YXRlIGZvcm1hdHRlZERhdGFzZXQ6IGFueTtcbiAgICBwcml2YXRlIGlzZm9ybWZpZWxkOiBib29sZWFuO1xuICAgIHByaXZhdGUgJHR5cGVhaGVhZEV2ZW50OiBFdmVudDtcblxuICAgIHB1YmxpYyB0YWJpbmRleDogbnVtYmVyO1xuICAgIHB1YmxpYyBzdGFydEluZGV4OiBudW1iZXI7XG4gICAgcHVibGljIGJpbmRkaXNwbGF5bGFiZWw6IHN0cmluZztcbiAgICBwdWJsaWMgdHlwZWFoZWFkQ29udGFpbmVyOiBUeXBlYWhlYWRDb250YWluZXJDb21wb25lbnQ7XG4gICAgcHVibGljIGNvbnRhaW5lclRhcmdldDogc3RyaW5nO1xuICAgIHB1YmxpYyBjbGVhcnNlYXJjaGljb25jbGFzczogc3RyaW5nO1xuICAgIHB1YmxpYyBiYWNrc2VhcmNoaWNvbmNsYXNzOiBzdHJpbmc7XG4gICAgcHVibGljIHNlYXJjaGljb25jbGFzczogc3RyaW5nO1xuXG4gICAgQFZpZXdDaGlsZChUeXBlYWhlYWREaXJlY3RpdmUpIHR5cGVhaGVhZDogVHlwZWFoZWFkRGlyZWN0aXZlO1xuICAgIEBWaWV3Q2hpbGQoJ3VsRWxlbWVudCcpIHVsRWxlbWVudDogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkcmVuKCdsaUVsZW1lbnRzJykgbGlFbGVtZW50czogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXG4gICAgcHJpdmF0ZSBhbGxvd29ubHlzZWxlY3Q6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBjbGFzczogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSBsYXN0U2VsZWN0ZWRJbmRleDogbnVtYmVyO1xuICAgIHByaXZhdGUgZGF0YW9wdGlvbnM6IGFueTtcbiAgICBwdWJsaWMgZHJvcGRvd25FbDogYW55O1xuICAgIHByaXZhdGUgX2xhc3RRdWVyeTogc3RyaW5nO1xuICAgIHByaXZhdGUgX2xhc3RSZXN1bHQ6IGFueTtcbiAgICBwcml2YXRlIF9pc09wZW46IGJvb2xlYW47IC8vIHNldCB0byB0cnVlIHdoZW4gZHJvcGRvd24gaXMgb3BlblxuICAgIHByaXZhdGUgc2hvd0Nsb3NlYnRuOiBib29sZWFuO1xuICAgIHByaXZhdGUgX3Vuc3Vic2NyaWJlRHY6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfZGF0YXNvdXJjZTogYW55O1xuICAgIHByaXZhdGUgaXNTY3JvbGxlZDogYm9vbGVhbjtcbiAgICBwcml2YXRlIHBhcmVudEVsOiBhbnk7XG4gICAgcHJpdmF0ZSBwb3NpdGlvbjogc3RyaW5nO1xuICAgIHByaXZhdGUgZWxJbmRleDogbnVtYmVyO1xuICAgIHByaXZhdGUgbGlzdGVuUXVlcnk6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfZG9tVXBkYXRlZDogYm9vbGVhbjtcbiAgICBwcml2YXRlIHNlYXJjaG9uOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBzaG93Y2xlYXI6IGJvb2xlYW47XG4gICAgcHVibGljIG1hdGNobW9kZTogc3RyaW5nO1xuICAgIHByaXZhdGUgY2xlYXJEYXRhOiBib29sZWFuO1xuXG5cbiAgICAvLyBnZXR0ZXIgc2V0dGVyIGlzIGFkZGVkIHRvIHBhc3MgdGhlIGRhdGFzb3VyY2UgdG8gc2VhcmNoY29tcG9uZW50LlxuICAgIGdldCBkYXRhc291cmNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YXNvdXJjZTtcbiAgICB9XG5cbiAgICBzZXQgZGF0YXNvdXJjZShudikge1xuICAgICAgICB0aGlzLl9kYXRhc291cmNlID0gbnY7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGF2YWx1ZSB8fCB0aGlzLnRvQmVQcm9jZXNzZWREYXRhdmFsdWU7XG4gICAgICAgIHRoaXMudXBkYXRlQnlEYXRhdmFsdWUoZGF0YSk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluajogSW5qZWN0b3IsXG4gICAgICAgIGFwcDogQXBwLFxuICAgICAgICBAQXR0cmlidXRlKCdkYXRhdmFsdWUuYmluZCcpIHB1YmxpYyBiaW5kZGF0YXZhbHVlLFxuICAgICAgICBAQXR0cmlidXRlKCdkYXRhc2V0LmJpbmQnKSBwdWJsaWMgYmluZGRhdGFzZXQsXG4gICAgICAgIEBJbmplY3QoJ0VYUExJQ0lUX0NPTlRFWFQnKSBAT3B0aW9uYWwoKSBleHBsaWNpdENvbnRleHQ6IGFueVxuICAgICkge1xuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9DT05GSUcsIGV4cGxpY2l0Q29udGV4dCk7XG4gICAgICAgIC8vIHRoaXMgZmxhZyB3aWxsIG5vdCBhbGxvdyB0aGUgZW1wdHkgZGF0YWZpZWxkIHZhbHVlcy5cbiAgICAgICAgdGhpcy5hbGxvd2VtcHR5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYXBwID0gYXBwO1xuICAgICAgICBhZGRDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQsICdhcHAtc2VhcmNoJywgdHJ1ZSk7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIExpc3RlbnMgZm9yIHRoZSBjaGFuZ2UgaW4gdGhlIG5nTW9kZWwgb24gZXZlcnkgc2VhcmNoIGFuZCByZXRyaWV2ZXMgdGhlIGRhdGEgYXMgb2JzZXJ2YWJsZS5cbiAgICAgICAgICogVGhpcyBvYnNlcnZhYmxlIGRhdGEgaXMgcGFzc2VkIHRvIHRoZSB0eXBlYWhlYWQuXG4gICAgICAgICAqIEB0eXBlIHtPYnNlcnZhYmxlPGFueT59XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnR5cGVhaGVhZERhdGFTb3VyY2UgPSBPYnNlcnZhYmxlXG4gICAgICAgICAgICAuY3JlYXRlKChvYnNlcnZlcjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gUnVucyBvbiBldmVyeSBzZWFyY2hcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5saXN0ZW5RdWVyeSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0UXVlcnlJbnZva2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodGhpcy5xdWVyeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIG9uIGtleWRvd24sIHdoaWxlIHNjcm9sbGluZyB0aGUgZHJvcGRvd24gaXRlbXMsIHdoZW4gbGFzdCBpdGVtIGlzIHJlYWNoZWQgbmV4dCBjYWxsIGlzIHRyaWdnZXJlZFxuICAgICAgICAgICAgICAgIC8vIHVubGVzcyB0aGUgY2FsbCBpcyByZXNvbHZlZCwgd2UgYXJlIGFibGUgdG8gc2Nyb2xsIG5leHQgdG8gZmlyc3QgaXRlbSBhbmQgc29vblxuICAgICAgICAgICAgICAgIC8vIFRoaXMgc2hvd3MgZmxpY2tlcmluZyBmcm9tIGZpcnN0IGl0ZW0gdG8gbmV4dCBuZXcgaXRlbXMgYXBwZW5kZWQuXG4gICAgICAgICAgICAgICAgLy8gQnkgc2V0dGluZyBjb250YWluZXIgdG8gdW5kZWZpbmVkLCBrZXkgZXZlbnRzIGNoYW5nZXMgd2lsbCBiZSBzdG9wcGVkIHdoaWxlIGxvYWRpbmcgaXRlbXNcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sYXN0U2VsZWN0ZWRJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnR5cGVhaGVhZC5fY29udGFpbmVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZ0l0ZW1zID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy5taW5jaGFycyA9PT0gMCB8fCAodGhpcy5xdWVyeSAmJiB0aGlzLnF1ZXJ5Lmxlbmd0aCA+PSB0aGlzLm1pbmNoYXJzKSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbWVyZ2VNYXAoKHRva2VuOiBzdHJpbmcpID0+IHRoaXMuZ2V0RGF0YVNvdXJjZUFzT2JzZXJ2YWJsZSh0b2tlbikpXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyID0gbmV3IERhdGFQcm92aWRlcigpO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBXaGVuIGRlZmF1bHQgZGF0YXZhbHVlIGlzIG5vdCBmb3VuZCB3aXRoaW4gdGhlIGRhdGFzZXQsIGEgZmlsdGVyIGNhbGwgaXMgbWFkZSB0byBnZXQgdGhlIHJlY29yZCB1c2luZyBmZXRjaERlZmF1bHRNb2RlbC5cbiAgICAgICAgICogYWZ0ZXIgZ2V0dGluZyB0aGUgcmVzcG9uc2UsIHNldCB0aGUgcXVlcnlNb2RlbCBhbmQgcXVlcnkuXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCBkYXRhdmFsdWVTdWJzY3JpcHRpb24gPSB0aGlzLmRhdGF2YWx1ZSQuc3Vic2NyaWJlKCh2YWw6IEFycmF5PHN0cmluZz4gfCBzdHJpbmcpID0+IHtcblxuICAgICAgICAgICAgY29uc3QgcXVlcnkgPSAoaXNBcnJheSh2YWwpID8gdmFsWzBdIDogdmFsKSBhcyBzdHJpbmc7XG5cbiAgICAgICAgICAgIGlmIChxdWVyeSA9PT0gbnVsbCB8fCBxdWVyeSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICAvLyByZXNldCB0aGUgcXVlcnkuXG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeSA9IHRoaXMucXVlcnlNb2RlbCA9ICcnO1xuICAgICAgICAgICAgICAgIC8vIG9uIGNsZWFyIG9yIHJlc2V0IGZpbHRlciwgZW1wdHkgdGhlIGxhc3RSZXN1bHRzIHRvIGZldGNoIG5ldyByZWNvcmRzLlxuICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RSZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3Vuc3Vic2NyaWJlRHYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0UXVlcnlJbnZva2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gaWYgcHJldiBkYXRhdmFsdWUgaXMgbm90IGVxdWFsIHRvIGN1cnJlbnQgZGF0YXZhbHVlIHRoZW4gY2xlYXIgdGhlIG1vZGVsQnlLZXkgYW5kIHF1ZXJ5TW9kZWxcbiAgICAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0KHZhbCkgJiYgKHRoaXMgYXMgYW55KS5wcmV2RGF0YXZhbHVlICE9PSB2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW9kZWxCeUtleSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWVyeSA9IHRoaXMucXVlcnlNb2RlbCA9ICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgZGF0YWZpZWxkIGlzIEFMTEZJTEVEUyBkbyBub3QgZmV0Y2ggdGhlIHJlY29yZHNcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgdGhlIHF1ZXJ5IG1vZGVsIHdpdGggdGhlIHZhbHVlcyB3ZSBoYXZlXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVCeURhdGF2YWx1ZSh2YWwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB0dXJuIG9uIHNob3dDbG9zZUJ0biB3aGVuIGEgZGVmYXVsdCB2YWx1ZSBpcyBnaXZlblxuICAgICAgICAgICAgdGhpcy5zaG93Q2xvc2VidG4gPSAodGhpcy5xdWVyeSAhPT0gJycpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigoKSA9PiBkYXRhdmFsdWVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG5cbiAgICAgICAgY29uc3QgZGF0YXNldFN1YnNjcmlwdGlvbiA9IHRoaXMuZGF0YXNldCQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIC8vIHNldCB0aGUgbmV4dCBpdGVtIGluZGV4LlxuICAgICAgICAgICAgdGhpcy5zdGFydEluZGV4ID0gdGhpcy5kYXRhc2V0SXRlbXMubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5fbGFzdFJlc3VsdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHRoaXMuZGF0YXZhbHVlIHx8IHRoaXMudG9CZVByb2Nlc3NlZERhdGF2YWx1ZTtcbiAgICAgICAgICAgIC8vIGludm9raW5nIHVwZGF0ZUJ5RGF0YXNldCBvbmx5IHdoZW4gZGF0YXZhbHVlIGlzIHByZXNlbnQsIGFzIGVudGVyZWQgdmFsdWUgaS5lLiBxdWVyeSBpcyBzZXR0aW5nIGJhY2sgdG8gJydcbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQoZGVmYXVsdFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQnlEYXRhc2V0KGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKCgpID0+IGRhdGFzZXRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gICAgfVxuXG4gICAgLy8gb24gY2xlYXIsIHRyaWdnZXIgc2VhcmNoIHdpdGggcGFnZSBzaXplIDFcbiAgICBwcml2YXRlIGNsZWFyU2VhcmNoKCRldmVudCwgbG9hZE9uQ2xlYXIpIHtcbiAgICAgICAgdGhpcy5xdWVyeSA9ICcnO1xuICAgICAgICB0aGlzLm9uSW5wdXRDaGFuZ2UoJGV2ZW50KTtcbiAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXIuaXNMYXN0UGFnZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxpc3RlblF1ZXJ5ID0gZmFsc2U7XG4gICAgICAgIGlmIChsb2FkT25DbGVhcikge1xuICAgICAgICAgICAgdGhpcy5saXN0ZW5RdWVyeSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl91bnN1YnNjcmliZUR2ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmxvYWRNb3JlRGF0YSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnY2xlYXJzZWFyY2gnKTtcbiAgICAgICAgdGhpcy5fbG9hZGluZ0l0ZW1zID0gZmFsc2U7XG4gICAgICAgIC8vIHdoZW4gc2VhcmNoIGlucHV0IGlzIGNsZWFyZWQsIGZvY3VzIG9uIHRoZSBpbnB1dCBmaWVsZFxuICAgICAgICBpZiAoJGV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLiRlbGVtZW50LmZpbmQoJy5hcHAtc2VhcmNoLWlucHV0JykuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGZ1bmN0aW9uIHRvICBjbGVhciB0aGUgaW5wdXQgdmFsdWVcbiAgICBwdWJsaWMgY2xlYXJUZXh0KCkge1xuICAgICAgICB0aGlzLnF1ZXJ5ID0gJyc7XG4gICAgICAgIHRoaXMuc2hvd0Nsb3NlYnRuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQ2xvc2UgdGhlIGZ1bGwgc2NyZWVuIG1vZGUgaW4gbW9iaWxlIHZpZXcgb2YgYXV0byBjb21wbGV0ZVxuICAgIHByaXZhdGUgY2xvc2VTZWFyY2goKSB7XG4gICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBhZ2UgPSAxO1xuICAgICAgICAvLyBhZnRlciBjbG9zaW5nIHRoZSBzZWFyY2gsIGluc2VydCB0aGUgZWxlbWVudCBhdCBpdHMgcHJldmlvdXMgcG9zaXRpb24gKGVsSW5kZXgpXG4gICAgICAgIHRoaXMuaW5zZXJ0QXRJbmRleCh0aGlzLmVsSW5kZXgpO1xuICAgICAgICB0aGlzLmVsSW5kZXggPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMucGFyZW50RWwgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoJ2Z1bGwtc2NyZWVuJyk7XG4gICAgICAgIGlmICh0aGlzLl9kb21VcGRhdGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9kb21VcGRhdGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5saXN0ZW5RdWVyeSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUR2ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50eXBlYWhlYWQuaGlkZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyTW9iaWxlQXV0b0NvbXBsZXRlKCkge1xuICAgICAgICAvLyBHZXQgdGhlIHBhcmVudCBlbGVtZW50IG9mIHRoZSBzZWFyY2ggZWxlbWVudCB3aGljaCBjYW4gYmUgbmV4dCBvciBwcmV2IGVsZW1lbnQsIGlmIGJvdGggYXJlIGVtcHR5IHRoZW4gZ2V0IHRoZSBwYXJlbnQgb2YgZWxlbWVudC5cbiAgICAgICAgaWYgKCFpc0RlZmluZWQodGhpcy5lbEluZGV4KSkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnRFbCA9IHRoaXMuJGVsZW1lbnQucGFyZW50KCk7XG4gICAgICAgICAgICB0aGlzLmVsSW5kZXggPSB0aGlzLnBhcmVudEVsLmNoaWxkcmVuKCkuaW5kZXgodGhpcy4kZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdmdWxsLXNjcmVlbicpKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGZsYWcgaXMgc2V0IHRvIG5vdGlmeSB0aGF0IHRoZSB0eXBlYWhlYWQtY29udGFpbmVyIGRvbSBoYXMgY2hhbmdlZCBpdHMgcG9zaXRpb25cbiAgICAgICAgICAgIHRoaXMuX2RvbVVwZGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgLy8gQWRkIGZ1bGwgc2NyZWVuIGNsYXNzIG9uIGZvY3VzIG9mIHRoZSBpbnB1dCBlbGVtZW50LlxuICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5hZGRDbGFzcygnZnVsbC1zY3JlZW4nKTtcblxuICAgICAgICAgICAgLy8gQWRkIHBvc2l0aW9uIHRvIHNldCB0aGUgaGVpZ2h0IHRvIGF1dG9cbiAgICAgICAgICAgIGlmICh0aGlzLnBvc2l0aW9uID09PSAnaW5saW5lJykge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3ModGhpcy5wb3NpdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZm9jdXMgaXMgbG9zdCB3aGVuIGVsZW1lbnQgaXMgY2hhbmdlZCB0byBmdWxsLXNjcmVlbiwga2V5ZG93biB0byBzZWxlY3QgbmV4dCBpdGVtcyB3aWxsIG5vdCB3b3JrXG4gICAgICAgIC8vIEhlbmNlIGV4cGxpY2l0bHkgZm9jdXNpbmcgdGhlIGlucHV0XG4gICAgICAgIGlmICh0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdmdWxsLXNjcmVlbicpKSB7XG4gICAgICAgICAgICB0aGlzLiRlbGVtZW50LmZpbmQoJy5hcHAtc2VhcmNoLWlucHV0JykuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGF0YVNvdXJjZUFzT2JzZXJ2YWJsZShxdWVyeTogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgLy8gc2hvdyBkcm9wZG93biBvbmx5IHdoZW4gdGhlcmUgaXMgY2hhbmdlIGluIHF1ZXJ5LiBUaGlzIHNob3VsZCBub3QgYXBwbHkgd2hlbiBkYXRhb3B0aW9ucyB3aXRoIGZpbHRlckZpZWxkcyBhcmUgdXBkYXRlZC5cbiAgICAgICAgLy8gd2hlbiBsYXN0UmVzdWx0IGlzIG5vdCBhdmFpbGFibGUgaS5lLiBzdGlsbCB0aGUgZmlyc3QgY2FsbCBpcyBwZW5kaW5nIGFuZCBzZWNvbmQgcXVlcnkgaXMgaW52b2tlZCB0aGVuIGRvIG5vdCByZXR1cm4uXG4gICAgICAgIGlmICh0aGlzLl9sYXN0UXVlcnkgPT09IHF1ZXJ5ICYmICFnZXQodGhpcy5kYXRhb3B0aW9ucywgJ2ZpbHRlckZpZWxkcycpICYmIGlzRGVmaW5lZCh0aGlzLl9sYXN0UmVzdWx0KSkge1xuICAgICAgICAgICAgdGhpcy5fbG9hZGluZ0l0ZW1zID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gb2YodGhpcy5fbGFzdFJlc3VsdCk7XG4gICAgICAgIH1cblxuICAgICAgICAvKlxuICAgICAgICAgICAgIFdNUy0xOTE3NzogT24gZm9jdXMgb2YgaW5wdXQgZmllbGQgZm9yIGF1dG9jb21wbGV0ZSB0eXBlLCBkbyBub3QgdHJpZ2dlciBhcGkgY2FsbCB3aGVuXG4gICAgICAgICAgICAgICAgIGEpIHNlYXJjaGtleSBhbmQgZGlzcGxheWV4cHJlc3Npb24gYXJlIGRpZmZlcmVudFxuICAgICAgICAgICAgICAgICBiKSBiaW5kZGlzcGxheWxhYmVsIGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlc1xuICAgICAgICAgICAgICAgICBjKSBiaW5kZGlzcGxheWxhYmVsIGNvbnRhaW5zIHNpbmdsZSB2YWx1ZSB3aGljaCBkb2VzIG5vdCBtYXRjaCB3aXRoIHNlYXJjaGtleVxuICAgICAgICAqL1xuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnYXV0b2NvbXBsZXRlJyAmJiB0aGlzLnNlYXJjaGtleSAmJiB0aGlzLnF1ZXJ5ICYmIHRoaXMuZGF0YXZhbHVlKSB7XG4gICAgICAgICAgICBsZXQgYmluZERpc3BsYXlMYWJlbEFycmF5ID0gW107XG4gICAgICAgICAgICBjb25zdCBzZWFyY2hLZXlBcnJheSA9IHNwbGl0KHRoaXMuc2VhcmNoa2V5LCAnLCcpO1xuICAgICAgICAgICAgbGV0IGRpc3BsYXlsYWJlbDtcbiAgICAgICAgICAgIGlmICh0aGlzLmJpbmRkaXNwbGF5bGFiZWwpIHtcbiAgICAgICAgICAgICAgICBiaW5kRGlzcGxheUxhYmVsQXJyYXkgPSBzcGxpdCh0aGlzLmJpbmRkaXNwbGF5bGFiZWwsICcrJyk7XG4gICAgICAgICAgICAgICAgaWYgKGJpbmREaXNwbGF5TGFiZWxBcnJheS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmNsdWRlcyhiaW5kRGlzcGxheUxhYmVsQXJyYXlbMF0sICd8JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gL1xcWyguKj8pXFxdLztcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlsYWJlbCA9IHJlZ2V4LmV4ZWMoYmluZERpc3BsYXlMYWJlbEFycmF5WzBdKVsxXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlsYWJlbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKGJpbmREaXNwbGF5TGFiZWxBcnJheS5sZW5ndGggPiAxIHx8IChkaXNwbGF5bGFiZWwgJiYgIWluY2x1ZGVzKHNlYXJjaEtleUFycmF5LCBkaXNwbGF5bGFiZWwpKVxuICAgICAgICAgICAgICAgIHx8ICh0aGlzLmRpc3BsYXlleHByZXNzaW9uICYmICFpbmNsdWRlcyhzZWFyY2hLZXlBcnJheSwgdGhpcy5kaXNwbGF5ZXhwcmVzc2lvbikpKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbGFzdFF1ZXJ5ID0gdGhpcy5xdWVyeTtcbiAgICAgICAgcmV0dXJuIGZyb20odGhpcy5nZXREYXRhU291cmNlKHF1ZXJ5KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGhhbmRsZUV2ZW50KG5vZGU6IEhUTUxFbGVtZW50LCBldmVudE5hbWU6IHN0cmluZywgZXZlbnRDYWxsYmFjazogRnVuY3Rpb24sIGxvY2FsczogYW55KSB7XG4gICAgICAgIGlmICghaW5jbHVkZXMoWydibHVyJywgJ2ZvY3VzJywgJ3NlbGVjdCcsICdzdWJtaXQnLCAnY2hhbmdlJ10sIGV2ZW50TmFtZSkpIHtcbiAgICAgICAgICAgIHN1cGVyLmhhbmRsZUV2ZW50KG5vZGUsIGV2ZW50TmFtZSwgZXZlbnRDYWxsYmFjaywgbG9jYWxzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGhpZ2hsaWdodCB0aGUgY2hhcmFjdGVycyBpbiB0aGUgZHJvcGRvd24gbWF0Y2hpbmcgdGhlIHF1ZXJ5LlxuICAgIHByaXZhdGUgaGlnaGxpZ2h0KG1hdGNoOiBUeXBlYWhlYWRNYXRjaCwgcXVlcnk6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy50eXBlYWhlYWRDb250YWluZXIpIHtcbiAgICAgICAgICAgIC8vIGhpZ2hsaWdodCBvZiBjaGFycyB3aWxsIHdvcmsgb25seSB3aGVuIGxhYmVsIGFyZSBzdHJpbmdzLlxuICAgICAgICAgICAgKG1hdGNoIGFzIGFueSkudmFsdWUgPSBtYXRjaC5pdGVtLmxhYmVsLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50eXBlYWhlYWRDb250YWluZXIuaGlnaGxpZ2h0KG1hdGNoLCBxdWVyeSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpbnNlcnRzIHRoZSBlbGVtZW50IGF0IHRoZSBpbmRleCBwb3NpdGlvblxuICAgIHByaXZhdGUgaW5zZXJ0QXRJbmRleChpKSB7XG4gICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudEVsLnByZXBlbmQodGhpcy4kZWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCAkZWxBdEluZGV4ID0gdGhpcy5wYXJlbnRFbC5jaGlsZHJlbigpLmVxKGkpO1xuICAgICAgICAgICAgaWYgKCRlbEF0SW5kZXgubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5wYXJlbnRFbC5jaGlsZHJlbigpLmVxKGkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5pbnNlcnRBZnRlcih0aGlzLnBhcmVudEVsLmNoaWxkcmVuKCkuZXEoaSAtIDEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoZSB3aWRnZXQgaXMgb2YgdHlwZSBhdXRvY29tcGxldGUgaW4gbW9iaWxlIHZpZXcvIGFwcFxuICAgIHB1YmxpYyBpc01vYmlsZUF1dG9Db21wbGV0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ2F1dG9jb21wbGV0ZScgJiYgaXNNb2JpbGUoKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgcXVlcnkgaXMgZW50ZXJlZCBpbiB0aGUgaW5wdXQgYW5kIHRoZSB2aWV3IGlzIG5vdCBtb2JpbGVcbiAgICBwdWJsaWMgaXNRdWVyeUVudGVyZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3djbGVhciAmJiB0aGlzLnNob3dDbG9zZWJ0bjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWRNb3JlRGF0YShpbmNyZW1lbnRQYWdlPzogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5kYXRhUHJvdmlkZXIuaXNMYXN0UGFnZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIEluY3JlYXNlIHRoZSBwYWdlIG51bWJlciBhbmQgdHJpZ2dlciBmb3JjZSBxdWVyeSB1cGRhdGVcbiAgICAgICAgdGhpcy5wYWdlID0gaW5jcmVtZW50UGFnZSA/IHRoaXMucGFnZSArIDEgOiB0aGlzLnBhZ2U7XG5cbiAgICAgICAgdGhpcy5pc1Njcm9sbGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fbG9hZGluZ0l0ZW1zID0gdHJ1ZTtcblxuICAgICAgICAvLyB3aGVuIGludm9raW5nIG5ldyBzZXQgb2YgcmVzdWx0cywgcmVzZXQgdGhlIGxhc3RRdWVyeS5cbiAgICAgICAgaWYgKGluY3JlbWVudFBhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2xhc3RRdWVyeSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRyaWdnZXIgdGhlIHR5cGVhaGVhZCBjaGFuZ2UgbWFudWFsbHkgdG8gZmV0Y2ggdGhlIG5leHQgc2V0IG9mIHJlc3VsdHMuXG4gICAgICAgIHRoaXMudHlwZWFoZWFkLm9uSW5wdXQoe1xuICAgICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHRyaW0odGhpcy5xdWVyeSkgfHwgJzAnIC8vIGR1bW15IGRhdGEgdG8gbm90aWZ5IHRoZSBvYnNlcnZhYmxlc1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBvbiBmb2N1c291dCwgc3Vic2NyaWJlIHRvIHRoZSBkYXRhdmFsdWUgY2hhbmdlcyBhZ2FpblxuICAgIHByaXZhdGUgb25Gb2N1c091dCgpIHtcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVEdiA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9sb2FkaW5nSXRlbXMgPSBmYWxzZTtcbiAgICAgICAgLy8gcmVzZXQgdGhlIHBhZ2UgdmFsdWUgb24gZm9jdXNvdXQuXG4gICAgICAgIHRoaXMucGFnZSA9IDE7XG4gICAgICAgIC8vIGlmIGRvbVVwZGF0ZWQgaXMgdHJ1ZSB0aGVuIGRvIG5vdCBoaWRlIHRoZSBkcm9wZG93biBpbiB0aGUgZnVsbHNjcmVlblxuICAgICAgICBpZiAoIXRoaXMuX2RvbVVwZGF0ZWQgJiYgdGhpcy5faXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLmxpc3RlblF1ZXJ5ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faXNPcGVuID0gZmFsc2U7XG4gICAgICAgIC8vIG9uIG91dHNpZGUgY2xpY2ssIHR5cGVhaGVhZCBpcyBoaWRkZW4uIFRvIGF2b2lkIHRoaXMsIHdoZW4gZnVsbHNjcmVlbiBpcyBzZXQsIG92ZXJyaWRkaW5nIGlzRm9jdXNlZCBmbGFnIG9uIHRoZSB0eXBlYWhlYWQgY29udGFpbmVyXG4gICAgICAgIGlmICh0aGlzLl9kb21VcGRhdGVkICYmIHRoaXMudHlwZWFoZWFkICYmICh0aGlzLnR5cGVhaGVhZCBhcyBhbnkpLl9jb250YWluZXIpIHtcbiAgICAgICAgICAgICh0aGlzLnR5cGVhaGVhZCBhcyBhbnkpLl9jb250YWluZXIuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25JbnB1dENoYW5nZSgkZXZlbnQpIHtcbiAgICAgICAgLy8gcmVzZXQgYWxsIHRoZSBwcmV2aW91cyBwYWdlIGRldGFpbHMgaW4gb3JkZXIgdG8gZmV0Y2ggbmV3IHNldCBvZiByZXN1bHQuXG4gICAgICAgIHRoaXMucmVzdWx0ID0gW107XG4gICAgICAgIHRoaXMucGFnZSA9IDE7XG4gICAgICAgIHRoaXMubGlzdGVuUXVlcnkgPSB0aGlzLmlzVXBkYXRlT25LZXlQcmVzcygpO1xuICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgLy8gd2hlbiBpbnB1dCBpcyBjbGVhcmVkLCByZXNldCB0aGUgZGF0YXZhbHVlXG4gICAgICAgIGlmICh0aGlzLnF1ZXJ5ID09PSAnJykge1xuICAgICAgICAgICAgdGhpcy5xdWVyeU1vZGVsID0gJyc7XG4gICAgICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSAnJztcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUHJldkRhdGF2YWx1ZSh0aGlzLl9sYXN0UXVlcnkpO1xuICAgICAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLl9tb2RlbEJ5VmFsdWUsIHt9LCB0cnVlKTtcblxuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdjbGVhcicsIHsgJGV2ZW50IH0pO1xuXG4gICAgICAgICAgICAvLyB0cmlnZ2VyIG9uU3VibWl0IG9ubHkgd2hlbiB0aGUgc2VhcmNoIGlucHV0IGlzIGNsZWFyZWQgb2ZmIGFuZCBkbyBub3QgdHJpZ2dlciB3aGVuIHRhYiBpcyBwcmVzc2VkLlxuICAgICAgICAgICAgaWYgKCRldmVudCAmJiAkZXZlbnQud2hpY2ggIT09IDkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3N1Ym1pdCcsIHsgJGV2ZW50IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaW52b2tpbmcgY2hhbmdlIGV2ZW50IG9uIGV2ZXJ5IGlucHV0IHZhbHVlIGNoYW5nZS5cbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgICRldmVudDogJGV2ZW50LFxuICAgICAgICAgICAgICAgIG5ld1ZhbDogdGhpcy5fbW9kZWxCeVZhbHVlIHx8IHRoaXMucXVlcnksXG4gICAgICAgICAgICAgICAgb2xkVmFsOiAodGhpcyBhcyBhbnkpLnByZXZEYXRhdmFsdWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2hvd0Nsb3NlYnRuID0gKHRoaXMucXVlcnkgIT09ICcnKTtcbiAgICB9XG5cbiAgICAvLyBUcmlnZ2VyZWQgZm9yIGVudGVyIGV2ZW50XG4gICAgcHJpdmF0ZSBoYW5kbGVFbnRlckV2ZW50KCRldmVudCkge1xuICAgICAgICAvLyBzdWJtaXQgZXZlbnQgdHJpZ2dlcmVkIHdoZW4gdGhlcmUgaXMgbm8gc2VhcmNoIHJlc3VsdHNcbiAgICAgICAgaWYgKCFnZXQodGhpcy50eXBlYWhlYWQsICdtYXRjaGVzLmxlbmd0aCcpKSB7XG4gICAgICAgICAgICB0aGlzLm9uU2VhcmNoU2VsZWN0KCRldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gVHJpZ2dlcnJlZCB3aGVuIHR5cGVhaGVhZCBvcHRpb24gaXMgc2VsZWN0ZWQuXG4gICAgcHJpdmF0ZSBvblNlYXJjaFNlbGVjdCgkZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGxldCBpdGVtO1xuICAgICAgICAvLyBXTVMtMjI1MzM6IEJlZm9yZSBhZGRpbmcgYWN0aXZlIHR5cGVhaGVhZCBlbCwgY2hlY2sgaWYgdGhlIGVudGVyZWQgcXVlcnkgbWF0Y2hlcyB3aXRoIHRoZSBhY3RpdmUgZWwgb3Igbm90XG4gICAgICAgIGNvbnN0IGlzUXVlcnlNYXRjaCA9IHRoaXMudHlwZWFoZWFkQ29udGFpbmVyPy5hY3RpdmU/LnZhbHVlID09PSB0aGlzLnF1ZXJ5O1xuXG4gICAgICAgIGlmICh0aGlzLnR5cGVhaGVhZENvbnRhaW5lciAmJiB0aGlzLnR5cGVhaGVhZENvbnRhaW5lci5hY3RpdmUgJiYgaXNRdWVyeU1hdGNoKSB7XG4gICAgICAgICAgICBpdGVtID0gdGhpcy50eXBlYWhlYWRDb250YWluZXIuYWN0aXZlLml0ZW07XG4gICAgICAgIH1cbiAgICAgICAgJGV2ZW50ID0gdGhpcy5ldmVudERhdGEoJGV2ZW50LCBpdGVtIHx8IHt9KTtcblxuICAgICAgICAvLyBzZWFyY2hPbiBpcyBzZXQgYXMgb25CdG5DbGljaywgdGhlbiBpbnZva2UgdGhlIHNlYXJjaCBhcGkgY2FsbCBtYW51YWxseS5cbiAgICAgICAgaWYgKCF0aGlzLmlzVXBkYXRlT25LZXlQcmVzcygpKSB7XG4gICAgICAgICAgICB0aGlzLmxpc3RlblF1ZXJ5ID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIHRyaWdnZXIgdGhlIHR5cGVhaGVhZCBjaGFuZ2UgbWFudWFsbHkgdG8gZmV0Y2ggdGhlIG5leHQgc2V0IG9mIHJlc3VsdHMuXG4gICAgICAgICAgICB0aGlzLnR5cGVhaGVhZC5vbklucHV0KHtcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMucXVlcnkgLy8gZHVtbXkgZGF0YSB0byBub3RpZnkgdGhlIG9ic2VydmFibGVzXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2hlbiBtYXRjaGVzIGFyZSBhdmFpbGFibGUuXG4gICAgICAgIGlmICh0aGlzLnR5cGVhaGVhZENvbnRhaW5lciAmJiB0aGlzLmxpRWxlbWVudHMubGVuZ3RoICYmIGlzUXVlcnlNYXRjaCkge1xuICAgICAgICAgICAgdGhpcy50eXBlYWhlYWRDb250YWluZXIuc2VsZWN0QWN0aXZlTWF0Y2goKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucXVlcnlNb2RlbCA9IHRoaXMucXVlcnk7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3N1Ym1pdCcsIHsgJGV2ZW50IH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbnZva2VPbkJlZm9yZVNlcnZpY2VDYWxsKGlucHV0RGF0YSkge1xuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZXNlcnZpY2VjYWxsJywgeyBpbnB1dERhdGEgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkRyb3Bkb3duT3BlbigpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xlYXJEYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGVhaGVhZC5oaWRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2V0dGluZyB0aGUgdWxFbGVtZW50cywgbGlFbGVtZW50IG9uIHR5cGVhaGVhZENvbnRhaW5lci5cbiAgICAgICAgLy8gYXMgd2UgYXJlIHVzaW5nIGN1c3RvbU9wdGlvbiB0ZW1wbGF0ZSwgbGlFbGVtZW50cyBhcmUgbm90IGF2YWlsYWJsZSBvbiB0eXBlYWhlYWRDb250YWluZXIgc28gYXBwZW5kIHRoZW0gZXhwbGljaXRseS5cbiAgICAgICAgY29uc3QgZm4gPSBkZWJvdW5jZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9pc09wZW4gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy50eXBlYWhlYWRDb250YWluZXIgPSB0aGlzLnR5cGVhaGVhZC5fY29udGFpbmVyIHx8ICh0aGlzLnR5cGVhaGVhZCBhcyBhbnkpLl90eXBlYWhlYWQuaW5zdGFuY2U7XG4gICAgICAgICAgICAodGhpcy50eXBlYWhlYWRDb250YWluZXIgYXMgYW55KS5saUVsZW1lbnRzID0gdGhpcy5saUVsZW1lbnRzO1xuICAgICAgICAgICAgKHRoaXMudHlwZWFoZWFkQ29udGFpbmVyIGFzIGFueSkudWxFbGVtZW50ID0gdGhpcy51bEVsZW1lbnQ7XG4gICAgICAgICAgICBhZGp1c3RDb250YWluZXJQb3NpdGlvbigkKCd0eXBlYWhlYWQtY29udGFpbmVyJyksIHRoaXMubmF0aXZlRWxlbWVudCwgKHRoaXMudHlwZWFoZWFkIGFzIGFueSkuX3R5cGVhaGVhZCwgJCgndHlwZWFoZWFkLWNvbnRhaW5lciAuZHJvcGRvd24tbWVudScpKTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBmbigpO1xuXG4gICAgICAgIC8vIG9wZW4gZnVsbC1zY3JlZW4gc2VhcmNoIHZpZXdcbiAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGVBdXRvQ29tcGxldGUoKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdmdWxsLXNjcmVlbicpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJNb2JpbGVBdXRvQ29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRyb3Bkb3duRWwgPSB0aGlzLmRyb3Bkb3duRWwuY2xvc2VzdCgndHlwZWFoZWFkLWNvbnRhaW5lcicpO1xuXG4gICAgICAgICAgICBkcm9wZG93bkVsLmluc2VydEFmdGVyKHRoaXMuJGVsZW1lbnQuZmluZCgnaW5wdXQnKS5maXJzdCgpKTtcbiAgICAgICAgICAgIGNvbnN0IHNjcmVlbkhlaWdodCA9IHRoaXMuJGVsZW1lbnQuY2xvc2VzdCgnLmFwcC1jb250ZW50JykuaGVpZ2h0KCk7XG4gICAgICAgICAgICBkcm9wZG93bkVsLmNzcyh7IHBvc2l0aW9uOiAncmVsYXRpdmUnLCB0b3A6IDAsIGhlaWdodDogc2NyZWVuSGVpZ2h0ICsgJ3B4JyB9KTtcbiAgICAgICAgICAgIHRoaXMuc2hvd0Nsb3NlYnRuID0gdGhpcy5xdWVyeSAmJiB0aGlzLnF1ZXJ5ICE9PSAnJztcblxuICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZCh0aGlzLmRhdGFQcm92aWRlci5pc0xhc3RQYWdlKSAmJiAhdGhpcy5kYXRhUHJvdmlkZXIuaXNMYXN0UGFnZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlclNlYXJjaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZWxlY3ROZXh0KCkge1xuICAgICAgICBjb25zdCBtYXRjaGVzID0gdGhpcy50eXBlYWhlYWRDb250YWluZXIubWF0Y2hlcztcblxuICAgICAgICBpZiAoIW1hdGNoZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleCA9IG1hdGNoZXMuaW5kZXhPZih0aGlzLnR5cGVhaGVhZENvbnRhaW5lci5hY3RpdmUpO1xuXG4gICAgICAgIC8vIG9uIGtleWRvd24sIGlmIHNjcm9sbCBpcyBhdCB0aGUgYm90dG9tIGFuZCBuZXh0IHBhZ2UgcmVjb3JkcyBhcmUgYXZhaWxhYmxlLCBmZXRjaCBuZXh0IHBhZ2UgaXRlbXMuXG4gICAgICAgIGlmICghdGhpcy5fbG9hZGluZ0l0ZW1zICYmICF0aGlzLmRhdGFQcm92aWRlci5pc0xhc3RQYWdlICYmIGluZGV4ICsgMSA+IG1hdGNoZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgLy8gaW5kZXggaXMgc2F2ZWQgaW4gb3JkZXIgdG8gc2VsZWN0IHRoZSBsYXN0U2VsZWN0ZWQgaXRlbSBpbiB0aGUgZHJvcGRvd24gYWZ0ZXIgZmV0Y2hpbmcgbmV4dCBwYWdlIGl0ZW1zLlxuICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRJbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgdGhpcy5sb2FkTW9yZURhdGEodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldExhc3RBY3RpdmVNYXRjaEFzU2VsZWN0ZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmxhc3RTZWxlY3RlZEluZGV4KSB7XG4gICAgICAgICAgICAodGhpcy50eXBlYWhlYWRDb250YWluZXIgYXMgYW55KS5fYWN0aXZlID0gdGhpcy50eXBlYWhlYWRDb250YWluZXIubWF0Y2hlc1t0aGlzLmxhc3RTZWxlY3RlZEluZGV4XTtcbiAgICAgICAgICAgIHRoaXMudHlwZWFoZWFkQ29udGFpbmVyLm5leHRBY3RpdmVNYXRjaCgpO1xuICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRJbmRleCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdHJpZ2dlclNlYXJjaCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YVByb3ZpZGVyLmlzTGFzdFBhZ2UgfHwgIXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2Z1bGwtc2NyZWVuJykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0eXBlQWhlYWREcm9wRG93biA9IHRoaXMuZHJvcGRvd25FbDtcbiAgICAgICAgY29uc3QgJGxhc3RJdGVtID0gdHlwZUFoZWFkRHJvcERvd24uZmluZCgnbGknKS5sYXN0KCk7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgbGFzdCBpdGVtIGlzIG5vdCBiZWxvdyB0aGUgZnVsbCBzY3JlZW5cbiAgICAgICAgaWYgKCRsYXN0SXRlbS5sZW5ndGggJiYgdHlwZUFoZWFkRHJvcERvd24ubGVuZ3RoICYmICh0eXBlQWhlYWREcm9wRG93bi5oZWlnaHQoKSArIHR5cGVBaGVhZERyb3BEb3duLnBvc2l0aW9uKCkudG9wID4gJGxhc3RJdGVtLmhlaWdodCgpICsgJGxhc3RJdGVtLnBvc2l0aW9uKCkudG9wKSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkTW9yZURhdGEodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzVXBkYXRlT25LZXlQcmVzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNob24gPT09ICd0eXBpbmcnO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVib3VuY2VEZWZhdWx0UXVlcnkoZGF0YSkge1xuICAgICAgICB0aGlzLl9kZWZhdWx0UXVlcnlJbnZva2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5nZXREYXRhU291cmNlKGRhdGEsIHRydWUpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeU1vZGVsID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGFzdFF1ZXJ5ID0gdGhpcy5xdWVyeSA9IHRoaXMucXVlcnlNb2RlbFswXS5sYWJlbCB8fCAnJztcbiAgICAgICAgICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSB0aGlzLnF1ZXJ5TW9kZWxbMF0udmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9kZWxCeUtleSA9IHRoaXMucXVlcnlNb2RlbFswXS5rZXk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93Q2xvc2VidG4gPSAodGhpcy5xdWVyeSAhPT0gJycpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeU1vZGVsID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRoaXMucXVlcnkgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmNsZWFyRGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChnZXQoKHRoaXMudHlwZWFoZWFkIGFzIGFueSksICdfdHlwZWFoZWFkLmlzU2hvd24nKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnR5cGVhaGVhZC5oaWRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUJ5RGF0YXZhbHVlKGRhdGEpIHtcbiAgICAgICAgdGhpcy51cGRhdGVCeURhdGFzZXQoZGF0YSk7XG4gICAgICAgIHRoaXMudXBkYXRlQnlEYXRhU291cmNlKGRhdGEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQnlEYXRhU291cmNlKGRhdGEpIHtcbiAgICAgICAgLy8gdmFsdWUgaXMgcHJlc2VudCBidXQgdGhlIGNvcnJlc3BvbmRpbmcga2V5IGlzIG5vdCBmb3VuZCB0aGVuIGZldGNoIG5leHQgc2V0XG4gICAgICAgIC8vIG1vZGVsQnlLZXkgd2lsbCBiZSBzZXQgb25seSB3aGVuIGRhdGF2YWx1ZSBpcyBhdmFpbGFibGUgaW5zaWRlIHRoZSBsb2NhbERhdGEgb3RoZXJ3aXNlIG1ha2UgYSBOL3cgY2FsbC5cbiAgICAgICAgaWYgKGlzRGVmaW5lZChkYXRhKSAmJiAhaXNPYmplY3QoZGF0YSkgJiYgdGhpcy5kYXRhc291cmNlICYmICFpc0RlZmluZWQodGhpcy5fbW9kZWxCeUtleSkgJiYgdGhpcy5kYXRhZmllbGQgIT09IEFMTEZJRUxEUykge1xuICAgICAgICAgICAgLy8gQXZvaWQgbWFraW5nIGRlZmF1bHQgcXVlcnkgaWYgcXVlcnlNb2RlbCBhbHJlYWR5IGV4aXN0cy5cbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQodGhpcy5xdWVyeU1vZGVsKSAmJiAhaXNFbXB0eSh0aGlzLnF1ZXJ5TW9kZWwpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVEYXRhdmFsdWVGcm9tUXVlcnlNb2RlbCgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTWFrZSBkZWZhdWx0IHF1ZXJ5IGNhbGwgb25seSB3aGVuIGRhdGFzb3VyY2Ugc3VwcG9ydHMgQ1JVRCAobGl2ZSB2YXJpYWJsZSkuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2RlZmF1bHRRdWVyeUludm9rZWQgJiYgdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uU1VQUE9SVFNfQ1JVRCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlYm91bmNlRGVmYXVsdFF1ZXJ5KGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlcyB0aGUgbW9kZWwgdmFsdWUgdXNpbmcgcXVlcnlNb2RlbFxuICAgIHByaXZhdGUgdXBkYXRlRGF0YXZhbHVlRnJvbVF1ZXJ5TW9kZWwoKSB7XG4gICAgICAgIGlmIChpc0RlZmluZWQodGhpcy5xdWVyeU1vZGVsKSkge1xuICAgICAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gaXNBcnJheSh0aGlzLnF1ZXJ5TW9kZWwpID8gKHRoaXMucXVlcnlNb2RlbFswXSBhcyBEYXRhU2V0SXRlbSkudmFsdWUgOiB0aGlzLnF1ZXJ5TW9kZWw7XG4gICAgICAgICAgICB0aGlzLl9tb2RlbEJ5S2V5ID0gaXNBcnJheSh0aGlzLnF1ZXJ5TW9kZWwpID8gKHRoaXMucXVlcnlNb2RlbFswXSBhcyBEYXRhU2V0SXRlbSkua2V5IDogdGhpcy5xdWVyeU1vZGVsO1xuICAgICAgICAgICAgdGhpcy50b0JlUHJvY2Vzc2VkRGF0YXZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVCeURhdGFzZXQoZGF0YTogYW55KSB7XG4gICAgICAgIC8vIGRlZmF1bHQgcXVlcnkgaXMgYWxyZWFkeSBpbnZva2VkIHRoZW4gZG8gbm90IG1ha2Ugb3RoZXIgZGVmYXVsdCBxdWVyeSBjYWxsLlxuICAgICAgICAvLyBGb3IgbG9jYWwgc2VhcmNoIGkuZS4gc2VhcmNoa2V5IGlzIHVuZGVmaW5lZCwgZG8gbm90IHJldHVybiwgdmVyaWZ5IHRoZSBkYXRhdmFsdWUgYWdhaW5zdCB0aGUgZGF0YXNldEl0ZW1zIC5cbiAgICAgICAgaWYgKHRoaXMuX2RlZmF1bHRRdWVyeUludm9rZWQgJiYgdGhpcy5zZWFyY2hrZXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSBmaW5kKHRoaXMuZGF0YXNldEl0ZW1zLCAoaXRlbSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChpc09iamVjdChpdGVtLnZhbHVlKSA/IGlzRXF1YWwoaXRlbS52YWx1ZSwgZGF0YSkgOiAodG9TdHJpbmcoaXRlbS52YWx1ZSkpLnRvTG93ZXJDYXNlKCkgPT09ICh0b1N0cmluZyhkYXRhKSkudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHNldCB0aGUgZGVmYXVsdCBvbmx5IHdoZW4gaXQgaXMgYXZhaWxhYmxlIGluIGRhdGFzZXQuXG4gICAgICAgIGlmIChzZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMucXVlcnlNb2RlbCA9IFtzZWxlY3RlZEl0ZW1dO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGF0YWZpZWxkID09PSBBTExGSUVMRFMgJiYgaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgICAgICAgIHRoaXMucXVlcnlNb2RlbCA9IHRoaXMuZ2V0VHJhbnNmb3JtZWREYXRhKGV4dHJhY3REYXRhQXNBcnJheShkYXRhKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyByZXNldHRpbmcgdGhlIHF1ZXJ5TW9kZWwgb25seSB3aGVuIHByZXZEYXRhdmFsdWUgaXMgZXF1YWwgdG8gZGF0YVxuICAgICAgICAgICAgaWYgKCh0aGlzIGFzIGFueSkucHJldkRhdGF2YWx1ZSAhPT0gZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMucXVlcnlNb2RlbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5ID0gJyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlRGF0YXZhbHVlRnJvbVF1ZXJ5TW9kZWwoKTtcblxuICAgICAgICAvLyBTaG93IHRoZSBsYWJlbCB2YWx1ZSBvbiBpbnB1dC5cbiAgICAgICAgdGhpcy5fbGFzdFF1ZXJ5ID0gdGhpcy5xdWVyeSA9IGlzRGVmaW5lZCh0aGlzLnF1ZXJ5TW9kZWwpICYmIHRoaXMucXVlcnlNb2RlbC5sZW5ndGggPyBnZXQodGhpcy5xdWVyeU1vZGVsWzBdLCAnbGFiZWwnKSA6ICcnO1xuICAgICAgICB0aGlzLnNob3dDbG9zZWJ0biA9ICh0aGlzLnF1ZXJ5ICE9PSAnJyk7XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgaGF2ZSBsYXN0IHNlYXJjaCByZXN1bHRzIHRoZW4gb3BlbiBkcm9wZG93biBvbiBmb2N1c1xuICAgIHByaXZhdGUgaGFuZGxlRm9jdXMoJGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdzZWFyY2gnICYmIHRoaXMucXVlcnkgPT09IHRoaXMuX2xhc3RRdWVyeSAmJiB0aGlzLl9sYXN0UmVzdWx0KSB7XG4gICAgICAgICAgICAodGhpcy50eXBlYWhlYWQgYXMgYW55KS5rZXlVcEV2ZW50RW1pdHRlci5lbWl0KHRoaXMucXVlcnkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5vdGlmeVN1YnNjcmliZXIoKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudEVsID0gJCh0aGlzLm5hdGl2ZUVsZW1lbnQpLmNsb3Nlc3QoJy5hcHAtY29tcG9zaXRlLXdpZGdldC5jYXB0aW9uLWZsb2F0aW5nJyk7XG4gICAgICAgIGlmIChwYXJlbnRFbC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmFwcC5ub3RpZnkoJ2NhcHRpb25Qb3NpdGlvbkFuaW1hdGUnLCB7ZGlzcGxheVZhbDogdHJ1ZSwgbmF0aXZlRWw6IHBhcmVudEVsfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHByb3ZpZGVzIHRoZSBmaWx0ZXJlZCBkYXRhIGZyb20gdGhlIGRhdGFzb3VyY2UuXG4gICAgcHVibGljIGdldERhdGFTb3VyY2UocXVlcnk6IEFycmF5PHN0cmluZz4gfCBzdHJpbmcsIHNlYXJjaE9uRGF0YUZpZWxkPzogYm9vbGVhbiwgbmV4dEl0ZW1JbmRleD86IG51bWJlcik6IFByb21pc2U8RGF0YVNldEl0ZW1bXT4ge1xuICAgICAgICAvLyBGb3IgZGVmYXVsdCBxdWVyeSwgc2VhcmNoT25EYXRhRmllbGQgaXMgc2V0IHRvIHRydWUsIHRoZW4gZG8gbm90IG1ha2UgYSBuL3cgY2FsbCB3aGVuIGRhdGFmaWVsZCBpcyBBTExGSUVMRFNcbiAgICAgICAgaWYgKHNlYXJjaE9uRGF0YUZpZWxkICYmIHRoaXMuZGF0YWZpZWxkID09PSBBTExGSUVMRFMpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGb3IgZGVmYXVsdCBkYXRhdmFsdWUsIHNlYXJjaCBrZXkgYXMgdG8gYmUgb24gZGF0YWZpZWxkIHRvIGdldCB0aGUgZGVmYXVsdCBkYXRhIGZyb20gdGhlIGZpbHRlciBjYWxsLlxuICAgICAgICBjb25zdCBkYXRhQ29uZmlnOiBJRGF0YVByb3ZpZGVyQ29uZmlnID0ge1xuICAgICAgICAgICAgZGF0YXNldDogdGhpcy5kYXRhc2V0ID8gY29udmVydERhdGFUb09iamVjdCh0aGlzLmRhdGFzZXQpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgYmluZGRhdGFzZXQ6IHRoaXMuYmluZGRhdGFzZXQsXG4gICAgICAgICAgICBkYXRhc291cmNlOiB0aGlzLmRhdGFzb3VyY2UsXG4gICAgICAgICAgICBkYXRhZmllbGQ6IHRoaXMuZGF0YWZpZWxkLFxuICAgICAgICAgICAgaGFzRGF0YTogdGhpcy5kYXRhc2V0ICYmIHRoaXMuZGF0YXNldC5sZW5ndGgsXG4gICAgICAgICAgICBxdWVyeTogcXVlcnksXG4gICAgICAgICAgICBpc0xvY2FsRmlsdGVyOiAhdGhpcy5zZWFyY2hrZXksXG4gICAgICAgICAgICBzZWFyY2hLZXk6IHNlYXJjaE9uRGF0YUZpZWxkID8gdGhpcy5kYXRhZmllbGQgOiB0aGlzLnNlYXJjaGtleSxcbiAgICAgICAgICAgIC8vIGRlZmF1bHQgc2VhcmNoIGNhbGwgbWF0Y2ggbW9kZSBzaG91bGQgYmUgc3RhcnRpZ25vcmVjYXNlXG4gICAgICAgICAgICBtYXRjaE1vZGU6IHNlYXJjaE9uRGF0YUZpZWxkID8gJ3N0YXJ0aWdub3JlY2FzZScgOiB0aGlzLm1hdGNobW9kZSxcbiAgICAgICAgICAgIGNhc2VzZW5zaXRpdmU6IHRoaXMuY2FzZXNlbnNpdGl2ZSxcbiAgICAgICAgICAgIGlzZm9ybWZpZWxkOiB0aGlzLmlzZm9ybWZpZWxkLFxuICAgICAgICAgICAgb3JkZXJieTogdGhpcy5vcmRlcmJ5LFxuICAgICAgICAgICAgbGltaXQ6IHRoaXMubGltaXQsXG4gICAgICAgICAgICBwYWdlc2l6ZTogdGhpcy5wYWdlc2l6ZSxcbiAgICAgICAgICAgIHBhZ2U6IHRoaXMucGFnZSxcbiAgICAgICAgICAgIG9uQmVmb3Jlc2VydmljZWNhbGw6IHRoaXMuaW52b2tlT25CZWZvcmVTZXJ2aWNlQ2FsbC5iaW5kKHRoaXMpXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMuZGF0YW9wdGlvbnMpIHtcbiAgICAgICAgICAgIGRhdGFDb25maWcuZGF0YW9wdGlvbnMgPSB0aGlzLmRhdGFvcHRpb25zO1xuICAgICAgICAgICAgZGF0YUNvbmZpZy52aWV3UGFyZW50ID0gdGhpcy52aWV3UGFyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9hZGluZ0l0ZW1zID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhUHJvdmlkZXIuZmlsdGVyKGRhdGFDb25maWcpXG4gICAgICAgICAgICAudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIHJlc3BvbnNlIGZyb20gZGF0YVByb3ZpZGVyIHJldHVybnMgYWx3YXlzIGRhdGEgb2JqZWN0LlxuICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gcmVzcG9uc2UuZGF0YSB8fCByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAvLyBmb3Igc2VydmljZSB2YXJpYWJsZSwgdXBkYXRpbmcgdGhlIGRhdGFzZXQgb25seSBpZiBpdCBpcyBub3QgZGVmaW5lZCBvciBlbXB0eVxuICAgICAgICAgICAgICAgIGlmICgoIWlzRGVmaW5lZCh0aGlzLmRhdGFzZXQpIHx8ICF0aGlzLmRhdGFzZXQubGVuZ3RoKSAmJiB0aGlzLmRhdGFQcm92aWRlci51cGRhdGVEYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YXNldCA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGFQcm92aWRlci5oYXNNb3JlRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1hdHRlZERhdGFzZXQgPSB0aGlzLmZvcm1hdHRlZERhdGFzZXQuY29uY2F0KHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1hdHRlZERhdGFzZXQgPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBleHBsaWNpdGx5IHNldHRpbmcgdGhlIG9wdGlvbnNsaW1pdCBhcyB0aGUgbWF0Y2hlcyBtb3JlIHRoYW4gMjAgd2lsbCBiZSBpZ25vcmVkIGlmIG9wdGlvbnNsaW1pdCBpcyBub3Qgc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZvcm1hdHRlZERhdGFzZXQubGVuZ3RoID4gMjAgJiYgIWlzRGVmaW5lZCh0aGlzLmxpbWl0KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnR5cGVhaGVhZC50eXBlYWhlYWRPcHRpb25zTGltaXQgPSB0aGlzLmZvcm1hdHRlZERhdGFzZXQubGVuZ3RoO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIEluIG1vYmlsZSwgdHJpZ2dlciB0aGUgc2VhcmNoIGJ5IGRlZmF1bHQgdW50aWwgdGhlIHJlc3VsdHMgaGF2ZSBoZWlnaHQgdXB0byBwYWdlIGhlaWdodC4gT3RoZXIgcmVzdWx0cyBjYW4gYmUgZmV0Y2hlZCBieSBzY3JvbGxpbmdcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzT3BlbiAmJiB0aGlzLmlzTW9iaWxlQXV0b0NvbXBsZXRlKCkgJiYgIWlzVW5kZWZpbmVkKHRoaXMuZGF0YVByb3ZpZGVyLmlzTGFzdFBhZ2UpICYmICF0aGlzLmRhdGFQcm92aWRlci5pc0xhc3RQYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlclNlYXJjaCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkRGF0YSA9IHRoaXMuZ2V0VHJhbnNmb3JtZWREYXRhKHRoaXMuZm9ybWF0dGVkRGF0YXNldCwgbmV4dEl0ZW1JbmRleCk7XG5cbiAgICAgICAgICAgICAgICAvLyByZXN1bHQgY29udGFpbnMgdGhlIGRhdGFmaWVsZCB2YWx1ZXMuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0ID0gbWFwKHRyYW5zZm9ybWVkRGF0YSwgJ3ZhbHVlJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkRGF0YTtcbiAgICAgICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzU2Nyb2xsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgKGRlYm91bmNlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TGFzdEFjdGl2ZU1hdGNoQXNTZWxlY3RlZCgpO1xuICAgICAgICAgICAgICAgICAgICB9LCAzMCkpKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTY3JvbGxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBXaGVuIG5vIHJlc3VsdCBpcyBmb3VuZCwgc2V0IHRoZSBkYXRhdmFsdWUgdG8gdW5kZWZpbmVkLlxuICAgICAgICAgICAgICAgIGlmICghcmVzdWx0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVlcnlNb2RlbCA9IChxdWVyeSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBvbiBmb2N1c291dCBpLmUuIG9uIG90aGVyIHdpZGdldCBmb2N1cywgaWYgbi93IGlzIHBlbmRpbmcgbG9hZGluZyBpY29uIGlzIHNob3duLCB3aGVuIGRhdGEgaXMgYXZhaWxhYmxlIHRoZW4gZHJvcGRvd24gaXMgc2hvd24gYWdhaW4uXG4gICAgICAgICAgICAgICAgLy8gb24gdW5zdWJzY3JpYmluZyBkbyBub3Qgc2hvdyB0aGUgcmVzdWx0cy5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdW5zdWJzY3JpYmVEdikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZ0l0ZW1zID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGFzdFJlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcGFyZW50IGNvbnRleHQgaS5lLiBQYWdlIGNvbnRleHQgYW5kIG5vdCBwYXJlbnQgY29tcG9uZW50J3MgY29udGV4dC5cbiAgICBwcml2YXRlIGdldENvbnRleHQoY29udGV4dCkge1xuICAgICAgICBpZiAoY29udGV4dCAmJiBnZXQoY29udGV4dCwgJ3dpZGdldCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb250ZXh0KGNvbnRleHQudmlld1BhcmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFRyYW5zZm9ybWVkRGF0YShkYXRhOiBhbnksIGl0ZW1JbmRleD86IG51bWJlciwgaXNjdXN0b20/OiBib29sZWFuKTogRGF0YVNldEl0ZW1bXSB7XG4gICAgICAgIGlmIChpc0RlZmluZWQoaXRlbUluZGV4KSkge1xuICAgICAgICAgICAgaXRlbUluZGV4Kys7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZERhdGEgPSB0cmFuc2Zvcm1Gb3JtRGF0YShcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udGV4dCh0aGlzLnZpZXdQYXJlbnQpLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHRoaXMuZGF0YWZpZWxkLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogdGhpcy5kaXNwbGF5bGFiZWwgfHwgdGhpcy5kaXNwbGF5ZmllbGQsXG4gICAgICAgICAgICAgICAgZGlzcGxheUV4cHI6IGlzY3VzdG9tID8gJycgOiB0aGlzLmRpc3BsYXlleHByZXNzaW9uLFxuICAgICAgICAgICAgICAgIGJpbmREaXNwbGF5RXhwcjogaXNjdXN0b20gPyAnJyA6IHRoaXMuYmluZGRpc3BsYXlsYWJlbCxcbiAgICAgICAgICAgICAgICBiaW5kRGlzcGxheUltZ1NyYzogdGhpcy5iaW5kZGlzcGxheWltYWdlc3JjLFxuICAgICAgICAgICAgICAgIGRpc3BsYXlJbWdTcmM6IHRoaXMuZGlzcGxheWltYWdlc3JjXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXRlbUluZGV4LFxuICAgICAgICAgICAgdGhpc1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4gZ2V0VW5pcU9ianNCeURhdGFGaWVsZCh0cmFuc2Zvcm1lZERhdGEsIHRoaXMuZGF0YWZpZWxkLCB0aGlzLmRpc3BsYXlmaWVsZCB8fCB0aGlzLmRpc3BsYXlsYWJlbCwgdG9Cb29sZWFuKHRoaXMuYWxsb3dlbXB0eSkpO1xuICAgIH1cblxuICAgIC8vIE9wdGlvbnNMaXN0VGVtcGxhdGUgbGlzdGVucyB0byB0aGUgc2Nyb2xsIGV2ZW50IGFuZCB0cmlnZ2VycyB0aGlzIGZ1bmN0aW9uLlxuICAgIHB1YmxpYyBvblNjcm9sbCgkc2Nyb2xsRWw6IEVsZW1lbnQsIGV2dDogRXZlbnQpIHtcbiAgICAgICAgY29uc3QgdG90YWxIZWlnaHQgPSAkc2Nyb2xsRWwuc2Nyb2xsSGVpZ2h0LFxuICAgICAgICAgICAgY2xpZW50SGVpZ2h0ID0gJHNjcm9sbEVsLmNsaWVudEhlaWdodDtcblxuICAgICAgICAvLyBJZiBzY3JvbGwgaXMgYXQgdGhlIGJvdHRvbSBhbmQgbm8gcmVxdWVzdCBpcyBpbiBwcm9ncmVzcyBhbmQgbmV4dCBwYWdlIHJlY29yZHMgYXJlIGF2YWlsYWJsZSwgZmV0Y2ggbmV4dCBwYWdlIGl0ZW1zLlxuICAgICAgICBpZiAoIXRoaXMuX2xvYWRpbmdJdGVtcyAmJiAhdGhpcy5kYXRhUHJvdmlkZXIuaXNMYXN0UGFnZSAmJiAoJHNjcm9sbEVsLnNjcm9sbFRvcCArIGNsaWVudEhlaWdodCA+PSB0b3RhbEhlaWdodCkpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZE1vcmVEYXRhKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgICAgIGlmICghaXNEZWZpbmVkKHRoaXMubWluY2hhcnMpKSB7XG4gICAgICAgICAgICAvLyBmb3IgYXV0b2NvbXBsZXRlIHNldCB0aGUgbWluY2hhcnMgdG8gMFxuICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2F1dG9jb21wbGV0ZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1pbmNoYXJzID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5taW5jaGFycyA9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxpc3RlblF1ZXJ5ID0gdGhpcy5pc1VwZGF0ZU9uS2V5UHJlc3MoKTtcblxuICAgICAgICAvLyBieSBkZWZhdWx0IGZvciBhdXRvY29tcGxldGUgZG8gbm90IHNob3cgdGhlIHNlYXJjaCBpY29uXG4gICAgICAgIC8vIGJ5IGRlZmF1bHQgc2hvdyB0aGUgc2VhcmNoaWNvbiBmb3IgdHlwZSA9IHNlYXJjaFxuICAgICAgICB0aGlzLnNob3dzZWFyY2hpY29uID0gaXNEZWZpbmVkKHRoaXMuc2hvd3NlYXJjaGljb24pID8gdGhpcy5zaG93c2VhcmNoaWNvbiA6ICh0aGlzLnR5cGUgPT09ICdzZWFyY2gnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcblxuICAgICAgICBzdHlsZXIodGhpcy5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50LCB0aGlzKTtcbiAgICAgICAgdGhpcy5jb250YWluZXJUYXJnZXQgPSBnZXRDb250YWluZXJUYXJnZXRDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgICAgIGNvbnN0IHNlYXJjaElucHV0RWwgPSAkKCcuYXBwLXNlYXJjaC1pbnB1dCcpO1xuICAgICAgICBpZiAoc2VhcmNoSW5wdXRFbCkge1xuICAgICAgICAgICAgc2VhcmNoSW5wdXRFbC5yZW1vdmVBdHRyKCdhcmlhLWV4cGFuZGVkJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGV2ZW50RGF0YSgkZXZlbnQsIGl0ZW0pIHtcbiAgICAgICAgaWYgKCRldmVudCkge1xuICAgICAgICAgICAgJGV2ZW50WydkYXRhJ10gPSB7XG4gICAgICAgICAgICAgICAgaXRlbSAgOiBpdGVtLmRhdGFPYmplY3QsXG4gICAgICAgICAgICAgICAgbW9kZWwgOiBpdGVtLnZhbHVlLFxuICAgICAgICAgICAgICAgIGxhYmVsIDogaXRlbS5sYWJlbCxcbiAgICAgICAgICAgICAgICBxdWVyeSA6IHRoaXMucXVlcnlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJGV2ZW50O1xuICAgIH1cblxuICAgIC8vIHRyaWdnZXJlZCBvbiBzZWxlY3Qgb24gb3B0aW9uIGZyb20gdGhlIGxpc3QuIFNldCB0aGUgcXVlcnlNb2RlbCwgcXVlcnkgYW5kIG1vZGVsQnlLZXkgZnJvbSB0aGUgbWF0Y2hlZCBpdGVtLlxuICAgIHB1YmxpYyB0eXBlYWhlYWRPblNlbGVjdChtYXRjaDogVHlwZWFoZWFkTWF0Y2gsICRldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IG1hdGNoLml0ZW07XG4gICAgICAgIHRoaXMucXVlcnlNb2RlbCA9IGl0ZW07XG4gICAgICAgIGl0ZW0uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnF1ZXJ5ID0gaXRlbS5sYWJlbDtcbiAgICAgICAgdGhpcy5zaG93Q2xvc2VidG4gPSAodGhpcy5xdWVyeSAhPT0gJycpO1xuICAgICAgICAkZXZlbnQgPSAkZXZlbnQgfHwgdGhpcy4kdHlwZWFoZWFkRXZlbnQ7XG5cbiAgICAgICAgLy8gQXMgaXRlbS5rZXkgY2FuIHZhcnkgZnJvbSBrZXkgaW4gdGhlIGRhdGFzZXRJdGVtc1xuICAgICAgICB0aGlzLl9tb2RlbEJ5S2V5ID0gaXRlbS5rZXk7XG4gICAgICAgIHRoaXMuX21vZGVsQnlWYWx1ZSA9IGl0ZW0udmFsdWU7XG5cbiAgICAgICAgJGV2ZW50ID0gdGhpcy5ldmVudERhdGEoJGV2ZW50LCBpdGVtKTtcblxuICAgICAgICB0aGlzLmludm9rZU9uVG91Y2hlZCgpO1xuICAgICAgICB0aGlzLmludm9rZU9uQ2hhbmdlKHRoaXMuZGF0YXZhbHVlLCAkZXZlbnQgfHwge30pO1xuICAgICAgICAvLyB1cGRhdGluZyB0aGUgdmFyaWFibGUgYm91bmQgdG8gZGVmYXVsdCB2YWx1ZSBhcyBpbnZva2VPbkNoYW5nZSBpcyBub3QgdXBkYXRpbmcgdGhlIHZhcmlhYmxlLlxuICAgICAgICBpZiAodGhpcy5kYXRhdmFsdWUgIT09ICh0aGlzIGFzIGFueSkucHJldkRhdGF2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVCb3VuZFZhcmlhYmxlKHRoaXMuZGF0YXZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy4kZWxlbWVudC5oYXNDbGFzcygnZnVsbC1zY3JlZW4nKSkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZVNlYXJjaCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnc2VsZWN0JywgeyAkZXZlbnQsIHNlbGVjdGVkVmFsdWU6IHRoaXMuZGF0YXZhbHVlIH0pO1xuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3N1Ym1pdCcsIHsgJGV2ZW50IH0pO1xuXG4gICAgICAgIHRoaXMudXBkYXRlUHJldkRhdGF2YWx1ZSh0aGlzLmRhdGF2YWx1ZSk7XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXk6IHN0cmluZywgbnY6IGFueSwgb3Y6IGFueSkge1xuICAgICAgICBpZiAoa2V5ID09PSAndGFiaW5kZXgnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCYWNrd2FyZCBjb21wYXRhYmlsaXR5IGZyb20gMTAuMy4xIHRvIDEwLjMuMlxuICAgICAgICAvLyAxMC4zLjEgd2UgaGFkIGRpc3BsYXlsYWJlbCBhcyBtb2RhbCB2YWx1ZVxuICAgICAgICAvLyBGcm9tIDEwLjMuMiBvbndvcmRzIHdlIHdpbGwgYmUgaGF2aW5nIGRpc3BsYXlleHByZXNpb24gYXMgbW9kYWwgdmFsdWVcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2F1dG9jb21wbGV0ZScgJiYga2V5ID09PSAnZGlzcGxheWxhYmVsJyAmJiB0aGlzLmRpc3BsYXlsYWJlbCAmJiAoIXRoaXMuZGlzcGxheWV4cHJlc3Npb24gfHwgKHRoaXMuZGlzcGxheWV4cHJlc3Npb24gJiYgIXRoaXMuZGF0YXNvdXJjZSkpKSAge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZXhwcmVzc2lvbiA9IHRoaXMuZGlzcGxheWxhYmVsO1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5bGFiZWwgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3aGVuIGRhdGFvcHRpb25zIGFyZSBwcm92aWRlZCBhbmQgdGhlcmUgaXMgbm8gZGlzcGxheWxhYmVsIGdpdmVuIHRoZW4gZGlzcGxheWxhYmVsIGlzIHNldCBhcyB0aGUgcmVsYXRlZGZpZWxkXG4gICAgICAgIGlmIChrZXkgPT09ICdkaXNwbGF5bGFiZWwnICYmIHRoaXMuZGF0YW9wdGlvbnMgJiYgdGhpcy5iaW5kZGlzcGxheWxhYmVsID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5ID0gZ2V0KHRoaXMuX21vZGVsQnlWYWx1ZSwgbnYpIHx8IHRoaXMuX21vZGVsQnlWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdoZW4gc2VhcmNoIGlzIGRpc2FibGVkLCBkbyBub3QgbG9hZCBhbnkgbW9yZSBkYXRhIG9yIGp1c3QgY2xlYXIgdGhlIGRhdGEgdGhhdCBpcyBhbHJlYWR5IGluIHByb2Nlc3Mgb3IgbG9hZGVkLlxuICAgICAgICBpZiAoa2V5ID09PSAnZGlzYWJsZWQnKSB7XG4gICAgICAgICAgICBpZiAobnYgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhckRhdGEgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhckRhdGEgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChnZXQoKHRoaXMudHlwZWFoZWFkIGFzIGFueSksICdfdHlwZWFoZWFkLmlzU2hvd24nKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnR5cGVhaGVhZC5oaWRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlICNjdXN0b21JdGVtVGVtcGxhdGUgbGV0LW1vZGVsPVwiaXRlbVwiIGxldC1pbmRleD1cImluZGV4XCIgbGV0LXF1ZXJ5PVwicXVlcnlcIiBsZXQtbWF0Y2g9XCJtYXRjaFwiPlxuICA8IS0tIERlZmF1bHQgaXRlbSB0ZW1wbGF0ZSAtLT5cbiAgQGlmICghY29udGVudCkge1xuICAgIDxhPlxuICAgICAgQGlmIChtb2RlbC5pbWdTcmMpIHtcbiAgICAgICAgPGltZyBbc3JjXT1cIm1vZGVsLmltZ1NyY1wiIGFsdD1cIlNlYXJjaFwiIFtzdHlsZS53aWR0aF09XCJpbWFnZXdpZHRoXCI+XG4gICAgICB9XG4gICAgICA8c3BhbiBbdGl0bGVdPVwibW9kZWwubGFiZWxcIiBbaW5uZXJIdG1sXT1cImhpZ2hsaWdodChtYXRjaCwgcXVlcnkpIHx8IG1vZGVsLmxhYmVsXCI+PC9zcGFuPlxuICAgIDwvYT5cbiAgfVxuICA8IS0tIEN1c3RvbSBwYXJ0aWFsIHRlbXBsYXRlIC0tPlxuICBAaWYgKGNvbnRlbnQpIHtcbiAgICA8YSBbbmdDbGFzc109XCJ7Y3VzdG9tVGVtcGxhdGU6IGNvbnRlbnR9XCIgcGFydGlhbENvbnRhaW5lciBbd21JdGVtVGVtcGxhdGVdPVwiY29udGVudFwiIFt1c2VyQ29tcG9uZW50UGFyYW1zXT1cIm1hdGNoLml0ZW1cIj5cbiAgICAgIDxkaXYgcGFydGlhbC1jb250YWluZXItdGFyZ2V0PjwvZGl2PlxuICAgIDwvYT5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjdXN0b21MaXN0VGVtcGxhdGUgbGV0LW1hdGNoZXM9XCJtYXRjaGVzXCIgbGV0LWl0ZW1UZW1wbGF0ZT1cIml0ZW1UZW1wbGF0ZVwiIGxldC1xdWVyeT1cInF1ZXJ5XCI+XG4gIDx1bCAjdWxFbGVtZW50IGNsYXNzPVwiYXBwLXNlYXJjaCBkcm9wZG93bi1tZW51XCIgc2Nyb2xsYWJsZT5cbiAgICBAZm9yIChtYXRjaCBvZiBtYXRjaGVzOyB0cmFjayBtYXRjaDsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgIDxsaSAjbGlFbGVtZW50cyBbbmdDbGFzc109XCJ7YWN0aXZlOiB0eXBlYWhlYWRDb250YWluZXIgJiYgdHlwZWFoZWFkQ29udGFpbmVyLmlzQWN0aXZlKG1hdGNoKSwgJ2xpc3QtZ3JvdXAtaGVhZGVyJzogbWF0Y2ggJiYgbWF0Y2guaXNIZWFkZXIoKX1cIlxuICAgICAgICAobW91c2VlbnRlcik9XCJ0eXBlYWhlYWRDb250YWluZXIuc2VsZWN0QWN0aXZlKG1hdGNoKTtcIlxuICAgICAgICAoY2xpY2spPVwibWF0Y2ggJiYgIW1hdGNoLmlzSGVhZGVyKCkgJiYgdHlwZWFoZWFkQ29udGFpbmVyLnNlbGVjdE1hdGNoKG1hdGNoLCAkZXZlbnQpOyAkdHlwZWFoZWFkRXZlbnQgPSAkZXZlbnQ7IG5vdGlmeVN1YnNjcmliZXIoKTtcIj5cbiAgICAgICAgPCEtLSBpdGVtVGVtcGxhdGUgY29tZXMgZnJvbSB0aGUgPGlucHV0PiAtLT5cbiAgICAgICAgQGlmIChtYXRjaC5pc0hlYWRlcigpKSB7XG4gICAgICAgICAgPGg0IGNsYXNzPVwiZ3JvdXAtdGl0bGVcIj57e21hdGNoLnZhbHVlfX08L2g0PlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoIW1hdGNoLmlzSGVhZGVyKCkpIHtcbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1UZW1wbGF0ZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2l0ZW06IG1hdGNoLml0ZW0sIGluZGV4OiBpLCBtYXRjaDogbWF0Y2gsIHF1ZXJ5OiBxdWVyeX1cIj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgfVxuICAgICAgPC9saT5cbiAgICB9XG4gICAgPGRpdiBjbGFzcz1cInN0YXR1c1wiIFtoaWRkZW5dPVwiX2xvYWRpbmdJdGVtcyB8fCAhKGRhdGFjb21wbGV0ZW1zZyAmJiBkYXRhUHJvdmlkZXIuaXNMYXN0UGFnZSlcIj5cbiAgICAgIDxzcGFuIFt0ZXh0Q29udGVudF09XCJkYXRhY29tcGxldGVtc2dcIj48L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInN0YXR1c1wiIFtoaWRkZW5dPVwiIV9sb2FkaW5nSXRlbXNcIj5cbiAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2lyY2xlLW8tbm90Y2ggZmEtc3BpblwiPjwvaT5cbiAgICAgIDxzcGFuIFt0ZXh0Q29udGVudF09XCJsb2FkaW5nZGF0YW1zZ1wiPjwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC91bD5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS1UaGlzIHRlbXBsYXRlIGlzIGZvciBzZWFyY2ggaW5zaWRlIG1vYmlsZSBuYXZiYXIuLS0+XG5AaWYgKG5hdnNlYXJjaGJhcikge1xuICA8aW5wdXQgW3RpdGxlXT1cInF1ZXJ5IHx8ICcnXCIgdHlwZT1cInRleHRcIiBjbGFzcz1cImFwcC10ZXh0Ym94IGZvcm0tY29udHJvbCBsaXN0LW9mLW9ianMgYXBwLXNlYXJjaC1pbnB1dFwiIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciB8fCAnJ1wiXG4gICAgZm9jdXMtdGFyZ2V0XG4gICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBbYXR0ci5hY2Nlc3NrZXldPVwic2hvcnRjdXRrZXlcIlxuICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgWyhuZ01vZGVsKV09XCJxdWVyeVwiXG4gICAgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiXG4gICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICBbdHlwZWFoZWFkXT1cInR5cGVhaGVhZERhdGFTb3VyY2VcIlxuICAgIFt0eXBlYWhlYWRXYWl0TXNdPVwiZGVib3VuY2V0aW1lXCJcbiAgICBbdHlwZWFoZWFkSXRlbVRlbXBsYXRlXT1cImN1c3RvbUl0ZW1UZW1wbGF0ZVwiXG4gICAgW29wdGlvbnNMaXN0VGVtcGxhdGVdPVwiY3VzdG9tTGlzdFRlbXBsYXRlXCJcbiAgICAoaW5wdXQpPVwib25JbnB1dENoYW5nZSgkZXZlbnQpXCJcbiAgICAoa2V5ZG93bik9XCJsaXN0ZW5RdWVyeSA9IHRydWVcIlxuICAgIChrZXlkb3duLmVudGVyKT1cIiR0eXBlYWhlYWRFdmVudCA9ICRldmVudDtoYW5kbGVFbnRlckV2ZW50KCRldmVudClcIlxuICAgIChrZXlkb3duLmFycm93ZG93bik9XCJzZWxlY3ROZXh0KCRldmVudClcIlxuICAgIChibHVyKT1cImludm9rZU9uVG91Y2hlZCgkZXZlbnQpXCJcbiAgICAoY2xpY2spPVwiaGFuZGxlRm9jdXMoJGV2ZW50KTtcIlxuICAgIChmb2N1cyk9XCJfdW5zdWJzY3JpYmVEdiA9IGZhbHNlOyBsaXN0ZW5RdWVyeSA9IHRydWU7IGhhbmRsZUZvY3VzKCRldmVudCk7IGludm9rZU9uRm9jdXMoJGV2ZW50KTtcIlxuICAgIChmb2N1c291dCk9XCJvbkZvY3VzT3V0KClcIlxuICAgIFt0eXBlYWhlYWRNaW5MZW5ndGhdPVwibWluY2hhcnNcIlxuICAgIFt0eXBlYWhlYWRPcHRpb25zTGltaXRdPVwibGltaXRcIlxuICAgICh0eXBlYWhlYWRMb2FkaW5nKT1cIl9sb2FkaW5nSXRlbXNcIlxuICAgICh0eXBlYWhlYWRPblNlbGVjdCk9XCJ0eXBlYWhlYWRPblNlbGVjdCgkZXZlbnQpXCJcbiAgICB0eXBlYWhlYWRPcHRpb25GaWVsZD1cImxhYmVsXCJcbiAgICBbdHlwZWFoZWFkR3JvdXBGaWVsZF09XCJncm91cGJ5ID8gJ2dyb3VwYnknIDogbnVsbFwiXG4gICAgW3R5cGVhaGVhZEFzeW5jXT1cInRydWVcIlxuICAgIFt0eXBlYWhlYWRTY3JvbGxhYmxlXT1cInRydWVcIlxuICAgIFthZGFwdGl2ZVBvc2l0aW9uXT1cInRydWVcIlxuICAgIFt0eXBlYWhlYWRPcHRpb25zSW5TY3JvbGxhYmxlVmlld109XCJvcHRpb25zbGltaXRpbnNjcm9sbGFibGV2aWV3XCJcbiAgICBbZHJvcHVwXT1cImRyb3B1cFwiXG4gICAgW3RhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICBbYXR0ci5uYW1lXT1cIm5hbWVcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYWxhYmVsIHx8ICdTZWFyY2ggZmllbGQnXCIvPlxuICA8aSBjbGFzcz1cImJ0bi1jbG9zZSB3aSB3aS1jYW5jZWxcIiBbaGlkZGVuXT1cIiFzaG93Q2xvc2VidG5cIiAoY2xpY2spPVwiY2xlYXJTZWFyY2goJGV2ZW50KTtcIj48L2k+XG59IEBlbHNlIHtcbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWljb24gZm9ybS1jb250cm9sLWZlZWRiYWNrIGJhY2stYnRuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgKGNsaWNrKT1cImNsb3NlU2VhcmNoKClcIj48aSBjbGFzcz1cImFwcC1pY29uIHt7YmFja3NlYXJjaGljb25jbGFzc319XCI+PC9pPjwvYnV0dG9uPlxuICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5CYWNrIGJ1dHRvbjwvc3Bhbj5cbiAgPGlucHV0IFt0aXRsZV09XCJxdWVyeSB8fCAnJ1wiIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJhcHAtdGV4dGJveCBmb3JtLWNvbnRyb2wgbGlzdC1vZi1vYmpzIGFwcC1zZWFyY2gtaW5wdXRcIiBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgfHwgJydcIlxuICAgIGZvY3VzLXRhcmdldFxuICAgIFtjb250YWluZXJdPVwiY29udGFpbmVyVGFyZ2V0IHx8ICcud20tYXBwJ1wiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBbYXR0ci5hY2Nlc3NrZXldPVwic2hvcnRjdXRrZXlcIlxuICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgWyhuZ01vZGVsKV09XCJxdWVyeVwiXG4gICAgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiXG4gICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICBbdHlwZWFoZWFkXT1cInR5cGVhaGVhZERhdGFTb3VyY2VcIlxuICAgIFt0eXBlYWhlYWRXYWl0TXNdPVwiZGVib3VuY2V0aW1lXCJcbiAgICBbdHlwZWFoZWFkSXRlbVRlbXBsYXRlXT1cImN1c3RvbUl0ZW1UZW1wbGF0ZVwiXG4gICAgW29wdGlvbnNMaXN0VGVtcGxhdGVdPVwiY3VzdG9tTGlzdFRlbXBsYXRlXCJcbiAgICAoaW5wdXQpPVwib25JbnB1dENoYW5nZSgkZXZlbnQpXCJcbiAgICAoa2V5ZG93bik9XCJsaXN0ZW5RdWVyeSA9IHRydWVcIlxuICAgIChrZXlkb3duLmVudGVyKT1cIiR0eXBlYWhlYWRFdmVudCA9ICRldmVudDtoYW5kbGVFbnRlckV2ZW50KCRldmVudClcIlxuICAgIChrZXlkb3duLmFycm93ZG93bik9XCJzZWxlY3ROZXh0KCRldmVudClcIlxuICAgIChibHVyKT1cImludm9rZU9uVG91Y2hlZCgkZXZlbnQpOyBvbkZvY3VzT3V0KClcIlxuICAgIChjbGljayk9XCJoYW5kbGVGb2N1cygkZXZlbnQpO1wiXG4gICAgKGZvY3VzKT1cIl91bnN1YnNjcmliZUR2ID0gZmFsc2U7IGxpc3RlblF1ZXJ5ID0gdHJ1ZTsgaGFuZGxlRm9jdXMoJGV2ZW50KTsgaW52b2tlT25Gb2N1cygkZXZlbnQpXCJcbiAgICBbdHlwZWFoZWFkTWluTGVuZ3RoXT1cIm1pbmNoYXJzXCJcbiAgICBbdHlwZWFoZWFkT3B0aW9uc0xpbWl0XT1cImxpbWl0XCJcbiAgICAodHlwZWFoZWFkTG9hZGluZyk9XCJfbG9hZGluZ0l0ZW1zXCJcbiAgICAodHlwZWFoZWFkT25TZWxlY3QpPVwidHlwZWFoZWFkT25TZWxlY3QoJGV2ZW50KVwiXG4gICAgdHlwZWFoZWFkT3B0aW9uRmllbGQ9XCJsYWJlbFwiXG4gICAgW3R5cGVhaGVhZEdyb3VwRmllbGRdPVwiZ3JvdXBieSA/ICdncm91cGJ5JyA6IG51bGxcIlxuICAgIFt0eXBlYWhlYWRBc3luY109XCJ0cnVlXCJcbiAgICBbdHlwZWFoZWFkU2Nyb2xsYWJsZV09XCJ0cnVlXCJcbiAgICBbYWRhcHRpdmVQb3NpdGlvbl09XCJ0cnVlXCJcbiAgICBbdHlwZWFoZWFkT3B0aW9uc0luU2Nyb2xsYWJsZVZpZXddPVwib3B0aW9uc2xpbWl0aW5zY3JvbGxhYmxldmlld1wiXG4gICAgW3RhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICBbZHJvcHVwXT1cImRyb3B1cFwiXG4gICAgW2F0dHIubmFtZV09XCJuYW1lXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFsYWJlbCB8fCAnU2VhcmNoIGZpZWxkJ1wiPlxuICA8aW5wdXQgY2xhc3M9XCJtb2RlbC1ob2xkZXJcIiBuZy1tb2RlbD1cInByb3h5TW9kZWxcIiBuZy1yZXF1aXJlZD1cInJlcXVpcmVkXCIgdGFiaW5kZXg9XCItMVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICBAaWYgKF9sb2FkaW5nSXRlbXMpIHtcbiAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cImZhIGZhLWNpcmNsZS1vLW5vdGNoIGZhLXNwaW4gZm9ybS1jb250cm9sLWZlZWRiYWNrXCI+PC9zcGFuPlxuICB9XG4gIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1pY29uIGZvcm0tY29udHJvbC1mZWVkYmFjayBjbGVhci1idG5cIiBbbmdDbGFzc109XCJ7J3Nob3ctYnRuJzogaXNRdWVyeUVudGVyZWQoKX1cIiAoY2xpY2spPVwiY2xlYXJTZWFyY2goJGV2ZW50LCB0cnVlKVwiPjxpIGNsYXNzPVwiYXBwLWljb24ge3tjbGVhcnNlYXJjaGljb25jbGFzc319XCI+PC9pPjwvYnV0dG9uPlxuICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5DbGVhciBidXR0b248L3NwYW4+XG4gIEBpZiAoc2hvd3NlYXJjaGljb24pIHtcbiAgICA8c3BhbiBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzogZGlzYWJsZWR9XCIgY2xhc3M9XCJpbnB1dC1ncm91cC1hZGRvblwiPlxuICAgICAgPGZvcm0+XG4gICAgICAgIDxidXR0b24gdGl0bGU9XCJTZWFyY2hcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBjbGFzcz1cImFwcC1zZWFyY2gtYnV0dG9uIGJ0biBidG4taWNvblwiIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgIChjbGljayk9XCJvblNlYXJjaFNlbGVjdCgkZXZlbnQpXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJhcHAtaWNvbiB7e3NlYXJjaGljb25jbGFzc319XCI+PC9pPjwvYnV0dG9uPlxuICAgICAgICA8L2Zvcm0+XG4gICAgICA8L3NwYW4+XG4gICAgfVxuICB9XG4gIDwhLS1UaGlzIHRlbXBsYXRlIGlzIGZvciBib3RoIHdlYiBhbmQgZnVsbHNjcmVlbiBtb2RlIGluIG1vYmlsZS4tLT5cbiJdfQ==
707
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchComponent, decorators: [{
708
+ type: Component,
709
+ args: [{ standalone: true, imports: [CommonModule, FormsModule, ScrollableDirective, TypeaheadModule, TextContentDirective, ItemTemplateDirective, PartialParamHandlerDirective, PartialContainerDirective], selector: '[wmSearch]', providers: [
710
+ provideAs(SearchComponent, NG_VALUE_ACCESSOR, true),
711
+ provideAs(SearchComponent, NG_VALIDATORS, true),
712
+ provideAsWidgetRef(SearchComponent)
713
+ ], template: "<ng-template #customItemTemplate let-model=\"item\" let-index=\"index\" let-query=\"query\" let-match=\"match\">\n <!-- Default item template -->\n @if (!content) {\n <a>\n @if (model.imgSrc) {\n <img [src]=\"model.imgSrc\" alt=\"Search\" [style.width]=\"imagewidth\">\n }\n <span [title]=\"model.label\" [innerHtml]=\"highlight(match, query) || model.label\"></span>\n </a>\n }\n <!-- Custom partial template -->\n @if (content) {\n <a [ngClass]=\"{customTemplate: content}\" partialContainer [wmItemTemplate]=\"content\" [userComponentParams]=\"match.item\">\n <div partial-container-target></div>\n </a>\n }\n</ng-template>\n\n<ng-template #customListTemplate let-matches=\"matches\" let-itemTemplate=\"itemTemplate\" let-query=\"query\">\n <ul #ulElement class=\"app-search dropdown-menu\" scrollable>\n @for (match of matches; track match; let i = $index) {\n <li #liElements [ngClass]=\"{active: typeaheadContainer && typeaheadContainer.isActive(match), 'list-group-header': match && match.isHeader()}\"\n (mouseenter)=\"typeaheadContainer.selectActive(match);\"\n (click)=\"match && !match.isHeader() && typeaheadContainer.selectMatch(match, $event); $typeaheadEvent = $event; notifySubscriber();\">\n <!-- itemTemplate comes from the <input> -->\n @if (match.isHeader()) {\n <h4 class=\"group-title\">{{match.value}}</h4>\n }\n @if (!match.isHeader()) {\n <ng-container [ngTemplateOutlet]=\"itemTemplate\"\n [ngTemplateOutletContext]=\"{item: match.item, index: i, match: match, query: query}\">\n </ng-container>\n }\n </li>\n }\n <div class=\"status\" [hidden]=\"_loadingItems || !(datacompletemsg && dataProvider.isLastPage)\">\n <span [textContent]=\"datacompletemsg\"></span>\n </div>\n <div class=\"status\" [hidden]=\"!_loadingItems\">\n <i class=\"fa fa-circle-o-notch fa-spin\"></i>\n <span [textContent]=\"loadingdatamsg\"></span>\n </div>\n </ul>\n</ng-template>\n\n<!--This template is for search inside mobile navbar.-->\n@if (navsearchbar) {\n <input [title]=\"query || ''\" type=\"text\" class=\"app-textbox form-control list-of-objs app-search-input\" [placeholder]=\"placeholder || ''\"\n focus-target\n container=\"body\"\n [disabled]=\"disabled\"\n [attr.accesskey]=\"shortcutkey\"\n autocomplete=\"off\"\n [(ngModel)]=\"query\"\n [ngModelOptions]=\"{standalone: true}\"\n [readonly]=\"readonly\"\n [typeahead]=\"typeaheadDataSource\"\n [typeaheadWaitMs]=\"debouncetime\"\n [typeaheadItemTemplate]=\"customItemTemplate\"\n [optionsListTemplate]=\"customListTemplate\"\n (input)=\"onInputChange($event)\"\n (keydown)=\"listenQuery = true\"\n (keydown.enter)=\"$typeaheadEvent = $event;handleEnterEvent($event)\"\n (keydown.arrowdown)=\"selectNext($event)\"\n (blur)=\"invokeOnTouched($event)\"\n (click)=\"handleFocus($event);\"\n (focus)=\"_unsubscribeDv = false; listenQuery = true; handleFocus($event); invokeOnFocus($event);\"\n (focusout)=\"onFocusOut()\"\n [typeaheadMinLength]=\"minchars\"\n [typeaheadOptionsLimit]=\"limit\"\n (typeaheadLoading)=\"_loadingItems\"\n (typeaheadOnSelect)=\"typeaheadOnSelect($event)\"\n typeaheadOptionField=\"label\"\n [typeaheadGroupField]=\"groupby ? 'groupby' : null\"\n [typeaheadAsync]=\"true\"\n [typeaheadScrollable]=\"true\"\n [adaptivePosition]=\"true\"\n [typeaheadOptionsInScrollableView]=\"optionslimitinscrollableview\"\n [dropup]=\"dropup\"\n [tabindex]=\"tabindex\"\n [attr.name]=\"name\"\n [attr.aria-label]=\"arialabel || 'Search field'\"/>\n <i class=\"btn-close wi wi-cancel\" [hidden]=\"!showClosebtn\" (click)=\"clearSearch($event);\"></i>\n} @else {\n <button type=\"button\" class=\"btn btn-icon form-control-feedback back-btn\" aria-hidden=\"true\" (click)=\"closeSearch()\"><i class=\"app-icon {{backsearchiconclass}}\"></i></button>\n <span class=\"sr-only\">Back button</span>\n <input [title]=\"query || ''\" type=\"text\" class=\"app-textbox form-control list-of-objs app-search-input\" [placeholder]=\"placeholder || ''\"\n focus-target\n [container]=\"containerTarget || '.wm-app'\"\n [disabled]=\"disabled\"\n [attr.accesskey]=\"shortcutkey\"\n autocomplete=\"off\"\n [(ngModel)]=\"query\"\n [ngModelOptions]=\"{standalone: true}\"\n [readonly]=\"readonly\"\n [typeahead]=\"typeaheadDataSource\"\n [typeaheadWaitMs]=\"debouncetime\"\n [typeaheadItemTemplate]=\"customItemTemplate\"\n [optionsListTemplate]=\"customListTemplate\"\n (input)=\"onInputChange($event)\"\n (keydown)=\"listenQuery = true\"\n (keydown.enter)=\"$typeaheadEvent = $event;handleEnterEvent($event)\"\n (keydown.arrowdown)=\"selectNext($event)\"\n (blur)=\"invokeOnTouched($event); onFocusOut()\"\n (click)=\"handleFocus($event);\"\n (focus)=\"_unsubscribeDv = false; listenQuery = true; handleFocus($event); invokeOnFocus($event)\"\n [typeaheadMinLength]=\"minchars\"\n [typeaheadOptionsLimit]=\"limit\"\n (typeaheadLoading)=\"_loadingItems\"\n (typeaheadOnSelect)=\"typeaheadOnSelect($event)\"\n typeaheadOptionField=\"label\"\n [typeaheadGroupField]=\"groupby ? 'groupby' : null\"\n [typeaheadAsync]=\"true\"\n [typeaheadScrollable]=\"true\"\n [adaptivePosition]=\"true\"\n [typeaheadOptionsInScrollableView]=\"optionslimitinscrollableview\"\n [tabindex]=\"tabindex\"\n [dropup]=\"dropup\"\n [attr.name]=\"name\"\n [attr.aria-label]=\"arialabel || 'Search field'\">\n <input class=\"model-holder\" ng-model=\"proxyModel\" ng-required=\"required\" tabindex=\"-1\" aria-hidden=\"true\">\n @if (_loadingItems) {\n <span aria-hidden=\"true\" class=\"fa fa-circle-o-notch fa-spin form-control-feedback\"></span>\n }\n <button type=\"button\" class=\"btn btn-icon form-control-feedback clear-btn\" [ngClass]=\"{'show-btn': isQueryEntered()}\" (click)=\"clearSearch($event, true)\"><i class=\"app-icon {{clearsearchiconclass}}\"></i></button>\n <span class=\"sr-only\">Clear button</span>\n @if (showsearchicon) {\n <span [ngClass]=\"{'disabled': disabled}\" class=\"input-group-addon\">\n <form>\n <button title=\"Search\" [disabled]=\"disabled\" class=\"app-search-button btn btn-icon\" type=\"submit\"\n (click)=\"onSearchSelect($event)\">\n <i class=\"app-icon {{searchiconclass}}\"></i></button>\n </form>\n </span>\n }\n }\n <!--This template is for both web and fullscreen mode in mobile.-->\n" }]
714
+ }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.App }, { type: undefined, decorators: [{
715
+ type: Attribute,
716
+ args: ['datavalue.bind']
717
+ }] }, { type: undefined, decorators: [{
718
+ type: Attribute,
719
+ args: ['dataset.bind']
720
+ }] }, { type: undefined, decorators: [{
721
+ type: Inject,
722
+ args: ['EXPLICIT_CONTEXT']
723
+ }, {
724
+ type: Optional
725
+ }] }], propDecorators: { typeahead: [{
726
+ type: ViewChild,
727
+ args: [TypeaheadDirective]
728
+ }], ulElement: [{
729
+ type: ViewChild,
730
+ args: ['ulElement']
731
+ }], liElements: [{
732
+ type: ViewChildren,
733
+ args: ['liElements']
734
+ }] } });
735
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9iYXNpYy9zZWFyY2gvc3JjL3NlYXJjaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvYmFzaWMvc2VhcmNoL3NyYy9zZWFyY2guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDM0QsT0FBTyxFQUdILFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBRVIsUUFBUSxFQUNSLFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNmLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUMsTUFBTSxFQUFFLFFBQVEsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRWhELE9BQU8sRUFFSCxrQkFBa0IsRUFFbEIsZUFBZSxFQUNsQixNQUFNLHlCQUF5QixDQUFDO0FBRWpDLE9BQU8sRUFBQyxRQUFRLEVBQUUsdUJBQXVCLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUM1RyxPQUFPLEVBQ0gsU0FBUyxFQUNULG1CQUFtQixFQUVuQixrQkFBa0IsRUFDbEIsdUJBQXVCLEVBQ3ZCLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIseUJB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WSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtGb3Jtc01vZHVsZSwgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7U2Nyb2xsYWJsZURpcmVjdGl2ZX0gZnJvbSAnLi9zY3JvbGxhYmxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0NoZWNrZWQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBBdHRyaWJ1dGUsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5qZWN0LFxuICAgIEluamVjdG9yLFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtmcm9tLCBPYnNlcnZhYmxlLCBvZn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2ZpbHRlciwgbWVyZ2VNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgICBUeXBlYWhlYWRDb250YWluZXJDb21wb25lbnQsXG4gICAgVHlwZWFoZWFkRGlyZWN0aXZlLFxuICAgIFR5cGVhaGVhZE1hdGNoLFxuICAgIFR5cGVhaGVhZE1vZHVsZVxufSBmcm9tICduZ3gtYm9vdHN0cmFwL3R5cGVhaGVhZCc7XG5cbmltcG9ydCB7YWRkQ2xhc3MsIGFkanVzdENvbnRhaW5lclBvc2l0aW9uLCBBcHAsIERhdGFTb3VyY2UsIGlzRGVmaW5lZCwgaXNNb2JpbGUsIHRvQm9vbGVhbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBTExGSUVMRFMsXG4gICAgY29udmVydERhdGFUb09iamVjdCxcbiAgICBEYXRhU2V0SXRlbSxcbiAgICBleHRyYWN0RGF0YUFzQXJyYXksXG4gICAgZ2V0Q29udGFpbmVyVGFyZ2V0Q2xhc3MsXG4gICAgZ2V0VW5pcU9ianNCeURhdGFGaWVsZCxcbiAgICBJdGVtVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgUGFydGlhbENvbnRhaW5lckRpcmVjdGl2ZSxcbiAgICBQYXJ0aWFsUGFyYW1IYW5kbGVyRGlyZWN0aXZlLFxuICAgIHByb3ZpZGVBcyxcbiAgICBwcm92aWRlQXNXaWRnZXRSZWYsXG4gICAgc3R5bGVyLFxuICAgIFRleHRDb250ZW50RGlyZWN0aXZlLFxuICAgIHRyYW5zZm9ybUZvcm1EYXRhXG59IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2UnO1xuaW1wb3J0IHtEYXRhc2V0QXdhcmVGb3JtQ29tcG9uZW50fSBmcm9tICdAd20vY29tcG9uZW50cy9pbnB1dC9kYXRhc2V0LWF3YXJlLWZvcm0nO1xuaW1wb3J0IHtyZWdpc3RlclByb3BzfSBmcm9tICcuL3NlYXJjaC5wcm9wcyc7XG5pbXBvcnQge0RhdGFQcm92aWRlciwgSURhdGFQcm92aWRlciwgSURhdGFQcm92aWRlckNvbmZpZ30gZnJvbSAnLi9kYXRhLXByb3ZpZGVyL2RhdGEtcHJvdmlkZXInO1xuaW1wb3J0IHtcbiAgICBkZWJvdW5jZSxcbiAgICBmaW5kLFxuICAgIGdldCxcbiAgICBpbmNsdWRlcyxcbiAgICBpc0FycmF5LFxuICAgIGlzRW1wdHksXG4gICAgaXNFcXVhbCxcbiAgICBpc09iamVjdCxcbiAgICBpc1VuZGVmaW5lZCxcbiAgICBtYXAsXG4gICAgc3BsaXQsXG4gICAgdG9TdHJpbmcsXG4gICAgdHJpbVxufSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmNvbnN0IFdJREdFVF9DT05GSUcgPSB7IHdpZGdldFR5cGU6ICd3bS1zZWFyY2gnLCBob3N0Q2xhc3M6ICdpbnB1dC1ncm91cCcgfTtcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgU2Nyb2xsYWJsZURpcmVjdGl2ZSwgVHlwZWFoZWFkTW9kdWxlLCBUZXh0Q29udGVudERpcmVjdGl2ZSwgSXRlbVRlbXBsYXRlRGlyZWN0aXZlLCBQYXJ0aWFsUGFyYW1IYW5kbGVyRGlyZWN0aXZlLCBQYXJ0aWFsQ29udGFpbmVyRGlyZWN0aXZlXSxcbiAgICBzZWxlY3RvcjogJ1t3bVNlYXJjaF0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zZWFyY2guY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlQXMoU2VhcmNoQ29tcG9uZW50LCBOR19WQUxVRV9BQ0NFU1NPUiwgdHJ1ZSksXG4gICAgICAgIHByb3ZpZGVBcyhTZWFyY2hDb21wb25lbnQsIE5HX1ZBTElEQVRPUlMsIHRydWUpLFxuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoU2VhcmNoQ29tcG9uZW50KVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgU2VhcmNoQ29tcG9uZW50IGV4dGVuZHMgRGF0YXNldEF3YXJlRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcbiAgICBwdWJsaWMgY2FzZXNlbnNpdGl2ZTogYm9vbGVhbjtcbiAgICBwdWJsaWMgc2VhcmNoa2V5OiBzdHJpbmc7XG4gICAgcHVibGljIHF1ZXJ5TW9kZWw6IEFycmF5PERhdGFTZXRJdGVtPiB8IHN0cmluZztcbiAgICBwdWJsaWMgcXVlcnkgPSAnJztcbiAgICBwdWJsaWMgbGltaXQ6IGFueTtcbiAgICBwdWJsaWMgc2hvd3NlYXJjaGljb246IGJvb2xlYW47XG4gICAgcHVibGljIG1pbmNoYXJzOiBudW1iZXI7XG4gICAgcHVibGljIHR5cGU6IHN0cmluZztcbiAgICBwdWJsaWMgbmF2c2VhcmNoYmFyOiBhbnk7XG4gICAgcHVibGljIGRlYm91bmNldGltZTogbnVtYmVyO1xuICAgIHB1YmxpYyBoaW50OiBzdHJpbmc7XG4gICAgcHVibGljIGFyaWFsYWJlbDogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSBhcHA6IEFwcDtcbiAgICBwcml2YXRlIHR5cGVhaGVhZERhdGFTb3VyY2U6IE9ic2VydmFibGU8YW55PjtcbiAgICBwcml2YXRlIHBhZ2VzaXplOiBhbnk7XG4gICAgcHJpdmF0ZSBwYWdlID0gMTtcbiAgICBwdWJsaWMgX2xvYWRpbmdJdGVtczogYm9vbGVhbjtcbiAgICBwcml2YXRlIGRhdGFQcm92aWRlcjogSURhdGFQcm92aWRlcjtcbiAgICBwcml2YXRlIHJlc3VsdDogQXJyYXk8YW55PjsgLy8gY29udGFpbnMgdGhlIHNlYXJjaCByZXN1bHQgaS5lLiBtYXRjaGVzXG4gICAgcHJpdmF0ZSBmb3JtYXR0ZWREYXRhc2V0OiBhbnk7XG4gICAgcHJpdmF0ZSBpc2Zvcm1maWVsZDogYm9vbGVhbjtcbiAgICBwcml2YXRlICR0eXBlYWhlYWRFdmVudDogRXZlbnQ7XG5cbiAgICBwdWJsaWMgdGFiaW5kZXg6IG51bWJlcjtcbiAgICBwdWJsaWMgc3RhcnRJbmRleDogbnVtYmVyO1xuICAgIHB1YmxpYyBiaW5kZGlzcGxheWxhYmVsOiBzdHJpbmc7XG4gICAgcHVibGljIHR5cGVhaGVhZENvbnRhaW5lcjogVHlwZWFoZWFkQ29udGFpbmVyQ29tcG9uZW50O1xuICAgIHB1YmxpYyBjb250YWluZXJUYXJnZXQ6IHN0cmluZztcbiAgICBwdWJsaWMgY2xlYXJzZWFyY2hpY29uY2xhc3M6IHN0cmluZztcbiAgICBwdWJsaWMgYmFja3NlYXJjaGljb25jbGFzczogc3RyaW5nO1xuICAgIHB1YmxpYyBzZWFyY2hpY29uY2xhc3M6IHN0cmluZztcblxuICAgIEBWaWV3Q2hpbGQoVHlwZWFoZWFkRGlyZWN0aXZlKSB0eXBlYWhlYWQ6IFR5cGVhaGVhZERpcmVjdGl2ZTtcbiAgICBAVmlld0NoaWxkKCd1bEVsZW1lbnQnKSB1bEVsZW1lbnQ6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZHJlbignbGlFbGVtZW50cycpIGxpRWxlbWVudHM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICAgIHByaXZhdGUgYWxsb3dvbmx5c2VsZWN0OiBib29sZWFuO1xuICAgIHByaXZhdGUgY2xhc3M6IHN0cmluZztcblxuICAgIHByaXZhdGUgbGFzdFNlbGVjdGVkSW5kZXg6IG51bWJlcjtcbiAgICBwcml2YXRlIGRhdGFvcHRpb25zOiBhbnk7XG4gICAgcHVibGljIGRyb3Bkb3duRWw6IGFueTtcbiAgICBwcml2YXRlIF9sYXN0UXVlcnk6IHN0cmluZztcbiAgICBwcml2YXRlIF9sYXN0UmVzdWx0OiBhbnk7XG4gICAgcHJpdmF0ZSBfaXNPcGVuOiBib29sZWFuOyAvLyBzZXQgdG8gdHJ1ZSB3aGVuIGRyb3Bkb3duIGlzIG9wZW5cbiAgICBwcml2YXRlIHNob3dDbG9zZWJ0bjogYm9vbGVhbjtcbiAgICBwcml2YXRlIF91bnN1YnNjcmliZUR2OiBib29sZWFuO1xuICAgIHByaXZhdGUgX2RhdGFzb3VyY2U6IGFueTtcbiAgICBwcml2YXRlIGlzU2Nyb2xsZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBwYXJlbnRFbDogYW55O1xuICAgIHByaXZhdGUgcG9zaXRpb246IHN0cmluZztcbiAgICBwcml2YXRlIGVsSW5kZXg6IG51bWJlcjtcbiAgICBwcml2YXRlIGxpc3RlblF1ZXJ5OiBib29sZWFuO1xuICAgIHByaXZhdGUgX2RvbVVwZGF0ZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBzZWFyY2hvbjogc3RyaW5nO1xuICAgIHByaXZhdGUgc2hvd2NsZWFyOiBib29sZWFuO1xuICAgIHB1YmxpYyBtYXRjaG1vZGU6IHN0cmluZztcbiAgICBwcml2YXRlIGNsZWFyRGF0YTogYm9vbGVhbjtcblxuXG4gICAgLy8gZ2V0dGVyIHNldHRlciBpcyBhZGRlZCB0byBwYXNzIHRoZSBkYXRhc291cmNlIHRvIHNlYXJjaGNvbXBvbmVudC5cbiAgICBnZXQgZGF0YXNvdXJjZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFzb3VyY2U7XG4gICAgfVxuXG4gICAgc2V0IGRhdGFzb3VyY2UobnYpIHtcbiAgICAgICAgdGhpcy5fZGF0YXNvdXJjZSA9IG52O1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhdmFsdWUgfHwgdGhpcy50b0JlUHJvY2Vzc2VkRGF0YXZhbHVlO1xuICAgICAgICB0aGlzLnVwZGF0ZUJ5RGF0YXZhbHVlKGRhdGEpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBpbmo6IEluamVjdG9yLFxuICAgICAgICBhcHA6IEFwcCxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGF0YXZhbHVlLmJpbmQnKSBwdWJsaWMgYmluZGRhdGF2YWx1ZSxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGF0YXNldC5iaW5kJykgcHVibGljIGJpbmRkYXRhc2V0LFxuICAgICAgICBASW5qZWN0KCdFWFBMSUNJVF9DT05URVhUJykgQE9wdGlvbmFsKCkgZXhwbGljaXRDb250ZXh0OiBhbnlcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHLCBleHBsaWNpdENvbnRleHQpO1xuICAgICAgICAvLyB0aGlzIGZsYWcgd2lsbCBub3QgYWxsb3cgdGhlIGVtcHR5IGRhdGFmaWVsZCB2YWx1ZXMuXG4gICAgICAgIHRoaXMuYWxsb3dlbXB0eSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFwcCA9IGFwcDtcbiAgICAgICAgYWRkQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LCAnYXBwLXNlYXJjaCcsIHRydWUpO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBMaXN0ZW5zIGZvciB0aGUgY2hhbmdlIGluIHRoZSBuZ01vZGVsIG9uIGV2ZXJ5IHNlYXJjaCBhbmQgcmV0cmlldmVzIHRoZSBkYXRhIGFzIG9ic2VydmFibGUuXG4gICAgICAgICAqIFRoaXMgb2JzZXJ2YWJsZSBkYXRhIGlzIHBhc3NlZCB0byB0aGUgdHlwZWFoZWFkLlxuICAgICAgICAgKiBAdHlwZSB7T2JzZXJ2YWJsZTxhbnk+fVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy50eXBlYWhlYWREYXRhU291cmNlID0gT2JzZXJ2YWJsZVxuICAgICAgICAgICAgLmNyZWF0ZSgob2JzZXJ2ZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFJ1bnMgb24gZXZlcnkgc2VhcmNoXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGlzdGVuUXVlcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdFF1ZXJ5SW52b2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2FkaW5nSXRlbXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHRoaXMucXVlcnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBvbiBrZXlkb3duLCB3aGlsZSBzY3JvbGxpbmcgdGhlIGRyb3Bkb3duIGl0ZW1zLCB3aGVuIGxhc3QgaXRlbSBpcyByZWFjaGVkIG5leHQgY2FsbCBpcyB0cmlnZ2VyZWRcbiAgICAgICAgICAgICAgICAvLyB1bmxlc3MgdGhlIGNhbGwgaXMgcmVzb2x2ZWQsIHdlIGFyZSBhYmxlIHRvIHNjcm9sbCBuZXh0IHRvIGZpcnN0IGl0ZW0gYW5kIHNvb25cbiAgICAgICAgICAgICAgICAvLyBUaGlzIHNob3dzIGZsaWNrZXJpbmcgZnJvbSBmaXJzdCBpdGVtIHRvIG5leHQgbmV3IGl0ZW1zIGFwcGVuZGVkLlxuICAgICAgICAgICAgICAgIC8vIEJ5IHNldHRpbmcgY29udGFpbmVyIHRvIHVuZGVmaW5lZCwga2V5IGV2ZW50cyBjaGFuZ2VzIHdpbGwgYmUgc3RvcHBlZCB3aGlsZSBsb2FkaW5nIGl0ZW1zXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGFzdFNlbGVjdGVkSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlYWhlYWQuX2NvbnRhaW5lciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMubWluY2hhcnMgPT09IDAgfHwgKHRoaXMucXVlcnkgJiYgdGhpcy5xdWVyeS5sZW5ndGggPj0gdGhpcy5taW5jaGFycykpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKCh0b2tlbjogc3RyaW5nKSA9PiB0aGlzLmdldERhdGFTb3VyY2VBc09ic2VydmFibGUodG9rZW4pKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmRhdGFQcm92aWRlciA9IG5ldyBEYXRhUHJvdmlkZXIoKTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogV2hlbiBkZWZhdWx0IGRhdGF2YWx1ZSBpcyBub3QgZm91bmQgd2l0aGluIHRoZSBkYXRhc2V0LCBhIGZpbHRlciBjYWxsIGlzIG1hZGUgdG8gZ2V0IHRoZSByZWNvcmQgdXNpbmcgZmV0Y2hEZWZhdWx0TW9kZWwuXG4gICAgICAgICAqIGFmdGVyIGdldHRpbmcgdGhlIHJlc3BvbnNlLCBzZXQgdGhlIHF1ZXJ5TW9kZWwgYW5kIHF1ZXJ5LlxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgZGF0YXZhbHVlU3Vic2NyaXB0aW9uID0gdGhpcy5kYXRhdmFsdWUkLnN1YnNjcmliZSgodmFsOiBBcnJheTxzdHJpbmc+IHwgc3RyaW5nKSA9PiB7XG5cbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0gKGlzQXJyYXkodmFsKSA/IHZhbFswXSA6IHZhbCkgYXMgc3RyaW5nO1xuXG4gICAgICAgICAgICBpZiAocXVlcnkgPT09IG51bGwgfHwgcXVlcnkgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgLy8gcmVzZXQgdGhlIHF1ZXJ5LlxuICAgICAgICAgICAgICAgIHRoaXMucXVlcnkgPSB0aGlzLnF1ZXJ5TW9kZWwgPSAnJztcbiAgICAgICAgICAgICAgICAvLyBvbiBjbGVhciBvciByZXNldCBmaWx0ZXIsIGVtcHR5IHRoZSBsYXN0UmVzdWx0cyB0byBmZXRjaCBuZXcgcmVjb3Jkcy5cbiAgICAgICAgICAgICAgICB0aGlzLl9sYXN0UmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLl91bnN1YnNjcmliZUR2KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdFF1ZXJ5SW52b2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIGlmIHByZXYgZGF0YXZhbHVlIGlzIG5vdCBlcXVhbCB0byBjdXJyZW50IGRhdGF2YWx1ZSB0aGVuIGNsZWFyIHRoZSBtb2RlbEJ5S2V5IGFuZCBxdWVyeU1vZGVsXG4gICAgICAgICAgICAgICAgaWYgKCFpc09iamVjdCh2YWwpICYmICh0aGlzIGFzIGFueSkucHJldkRhdGF2YWx1ZSAhPT0gdmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21vZGVsQnlLZXkgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVlcnkgPSB0aGlzLnF1ZXJ5TW9kZWwgPSAnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIGRhdGFmaWVsZCBpcyBBTExGSUxFRFMgZG8gbm90IGZldGNoIHRoZSByZWNvcmRzXG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBxdWVyeSBtb2RlbCB3aXRoIHRoZSB2YWx1ZXMgd2UgaGF2ZVxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQnlEYXRhdmFsdWUodmFsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdHVybiBvbiBzaG93Q2xvc2VCdG4gd2hlbiBhIGRlZmF1bHQgdmFsdWUgaXMgZ2l2ZW5cbiAgICAgICAgICAgIHRoaXMuc2hvd0Nsb3NlYnRuID0gKHRoaXMucXVlcnkgIT09ICcnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoKCkgPT4gZGF0YXZhbHVlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuXG4gICAgICAgIGNvbnN0IGRhdGFzZXRTdWJzY3JpcHRpb24gPSB0aGlzLmRhdGFzZXQkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAvLyBzZXQgdGhlIG5leHQgaXRlbSBpbmRleC5cbiAgICAgICAgICAgIHRoaXMuc3RhcnRJbmRleCA9IHRoaXMuZGF0YXNldEl0ZW1zLmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMuX2xhc3RSZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzLmRhdGF2YWx1ZSB8fCB0aGlzLnRvQmVQcm9jZXNzZWREYXRhdmFsdWU7XG4gICAgICAgICAgICAvLyBpbnZva2luZyB1cGRhdGVCeURhdGFzZXQgb25seSB3aGVuIGRhdGF2YWx1ZSBpcyBwcmVzZW50LCBhcyBlbnRlcmVkIHZhbHVlIGkuZS4gcXVlcnkgaXMgc2V0dGluZyBiYWNrIHRvICcnXG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKGRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUJ5RGF0YXNldChkZWZhdWx0VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigoKSA9PiBkYXRhc2V0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuICAgIH1cblxuICAgIC8vIG9uIGNsZWFyLCB0cmlnZ2VyIHNlYXJjaCB3aXRoIHBhZ2Ugc2l6ZSAxXG4gICAgcHJpdmF0ZSBjbGVhclNlYXJjaCgkZXZlbnQsIGxvYWRPbkNsZWFyKSB7XG4gICAgICAgIHRoaXMucXVlcnkgPSAnJztcbiAgICAgICAgdGhpcy5vbklucHV0Q2hhbmdlKCRldmVudCk7XG4gICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyLmlzTGFzdFBhZ2UgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5saXN0ZW5RdWVyeSA9IGZhbHNlO1xuICAgICAgICBpZiAobG9hZE9uQ2xlYXIpIHtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuUXVlcnkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVEdiA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5sb2FkTW9yZURhdGEoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2NsZWFyc2VhcmNoJyk7XG4gICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgICAvLyB3aGVuIHNlYXJjaCBpbnB1dCBpcyBjbGVhcmVkLCBmb2N1cyBvbiB0aGUgaW5wdXQgZmllbGRcbiAgICAgICAgaWYgKCRldmVudCkge1xuICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5maW5kKCcuYXBwLXNlYXJjaC1pbnB1dCcpLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmdW5jdGlvbiB0byAgY2xlYXIgdGhlIGlucHV0IHZhbHVlXG4gICAgcHVibGljIGNsZWFyVGV4dCgpIHtcbiAgICAgICAgdGhpcy5xdWVyeSA9ICcnO1xuICAgICAgICB0aGlzLnNob3dDbG9zZWJ0biA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIENsb3NlIHRoZSBmdWxsIHNjcmVlbiBtb2RlIGluIG1vYmlsZSB2aWV3IG9mIGF1dG8gY29tcGxldGVcbiAgICBwcml2YXRlIGNsb3NlU2VhcmNoKCkge1xuICAgICAgICB0aGlzLl9sb2FkaW5nSXRlbXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wYWdlID0gMTtcbiAgICAgICAgLy8gYWZ0ZXIgY2xvc2luZyB0aGUgc2VhcmNoLCBpbnNlcnQgdGhlIGVsZW1lbnQgYXQgaXRzIHByZXZpb3VzIHBvc2l0aW9uIChlbEluZGV4KVxuICAgICAgICB0aGlzLmluc2VydEF0SW5kZXgodGhpcy5lbEluZGV4KTtcbiAgICAgICAgdGhpcy5lbEluZGV4ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnBhcmVudEVsID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCdmdWxsLXNjcmVlbicpO1xuICAgICAgICBpZiAodGhpcy5fZG9tVXBkYXRlZCkge1xuICAgICAgICAgICAgdGhpcy5fZG9tVXBkYXRlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGlzdGVuUXVlcnkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVEdiA9IHRydWU7XG4gICAgICAgIHRoaXMudHlwZWFoZWFkLmhpZGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlck1vYmlsZUF1dG9Db21wbGV0ZSgpIHtcbiAgICAgICAgLy8gR2V0IHRoZSBwYXJlbnQgZWxlbWVudCBvZiB0aGUgc2VhcmNoIGVsZW1lbnQgd2hpY2ggY2FuIGJlIG5leHQgb3IgcHJldiBlbGVtZW50LCBpZiBib3RoIGFyZSBlbXB0eSB0aGVuIGdldCB0aGUgcGFyZW50IG9mIGVsZW1lbnQuXG4gICAgICAgIGlmICghaXNEZWZpbmVkKHRoaXMuZWxJbmRleCkpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50RWwgPSB0aGlzLiRlbGVtZW50LnBhcmVudCgpO1xuICAgICAgICAgICAgdGhpcy5lbEluZGV4ID0gdGhpcy5wYXJlbnRFbC5jaGlsZHJlbigpLmluZGV4KHRoaXMuJGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnZnVsbC1zY3JlZW4nKSkge1xuICAgICAgICAgICAgLy8gdGhpcyBmbGFnIGlzIHNldCB0byBub3RpZnkgdGhhdCB0aGUgdHlwZWFoZWFkLWNvbnRhaW5lciBkb20gaGFzIGNoYW5nZWQgaXRzIHBvc2l0aW9uXG4gICAgICAgICAgICB0aGlzLl9kb21VcGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIEFkZCBmdWxsIHNjcmVlbiBjbGFzcyBvbiBmb2N1cyBvZiB0aGUgaW5wdXQgZWxlbWVudC5cbiAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3MoJ2Z1bGwtc2NyZWVuJyk7XG5cbiAgICAgICAgICAgIC8vIEFkZCBwb3NpdGlvbiB0byBzZXQgdGhlIGhlaWdodCB0byBhdXRvXG4gICAgICAgICAgICBpZiAodGhpcy5wb3NpdGlvbiA9PT0gJ2lubGluZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50LmFkZENsYXNzKHRoaXMucG9zaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGZvY3VzIGlzIGxvc3Qgd2hlbiBlbGVtZW50IGlzIGNoYW5nZWQgdG8gZnVsbC1zY3JlZW4sIGtleWRvd24gdG8gc2VsZWN0IG5leHQgaXRlbXMgd2lsbCBub3Qgd29ya1xuICAgICAgICAvLyBIZW5jZSBleHBsaWNpdGx5IGZvY3VzaW5nIHRoZSBpbnB1dFxuICAgICAgICBpZiAodGhpcy4kZWxlbWVudC5oYXNDbGFzcygnZnVsbC1zY3JlZW4nKSkge1xuICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5maW5kKCcuYXBwLXNlYXJjaC1pbnB1dCcpLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERhdGFTb3VyY2VBc09ic2VydmFibGUocXVlcnk6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIC8vIHNob3cgZHJvcGRvd24gb25seSB3aGVuIHRoZXJlIGlzIGNoYW5nZSBpbiBxdWVyeS4gVGhpcyBzaG91bGQgbm90IGFwcGx5IHdoZW4gZGF0YW9wdGlvbnMgd2l0aCBmaWx0ZXJGaWVsZHMgYXJlIHVwZGF0ZWQuXG4gICAgICAgIC8vIHdoZW4gbGFzdFJlc3VsdCBpcyBub3QgYXZhaWxhYmxlIGkuZS4gc3RpbGwgdGhlIGZpcnN0IGNhbGwgaXMgcGVuZGluZyBhbmQgc2Vjb25kIHF1ZXJ5IGlzIGludm9rZWQgdGhlbiBkbyBub3QgcmV0dXJuLlxuICAgICAgICBpZiAodGhpcy5fbGFzdFF1ZXJ5ID09PSBxdWVyeSAmJiAhZ2V0KHRoaXMuZGF0YW9wdGlvbnMsICdmaWx0ZXJGaWVsZHMnKSAmJiBpc0RlZmluZWQodGhpcy5fbGFzdFJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIG9mKHRoaXMuX2xhc3RSZXN1bHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLypcbiAgICAgICAgICAgICBXTVMtMTkxNzc6IE9uIGZvY3VzIG9mIGlucHV0IGZpZWxkIGZvciBhdXRvY29tcGxldGUgdHlwZSwgZG8gbm90IHRyaWdnZXIgYXBpIGNhbGwgd2hlblxuICAgICAgICAgICAgICAgICBhKSBzZWFyY2hrZXkgYW5kIGRpc3BsYXlleHByZXNzaW9uIGFyZSBkaWZmZXJlbnRcbiAgICAgICAgICAgICAgICAgYikgYmluZGRpc3BsYXlsYWJlbCBjb250YWlucyBtdWx0aXBsZSB2YWx1ZXNcbiAgICAgICAgICAgICAgICAgYykgYmluZGRpc3BsYXlsYWJlbCBjb250YWlucyBzaW5nbGUgdmFsdWUgd2hpY2ggZG9lcyBub3QgbWF0Y2ggd2l0aCBzZWFyY2hrZXlcbiAgICAgICAgKi9cbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2F1dG9jb21wbGV0ZScgJiYgdGhpcy5zZWFyY2hrZXkgJiYgdGhpcy5xdWVyeSAmJiB0aGlzLmRhdGF2YWx1ZSkge1xuICAgICAgICAgICAgbGV0IGJpbmREaXNwbGF5TGFiZWxBcnJheSA9IFtdO1xuICAgICAgICAgICAgY29uc3Qgc2VhcmNoS2V5QXJyYXkgPSBzcGxpdCh0aGlzLnNlYXJjaGtleSwgJywnKTtcbiAgICAgICAgICAgIGxldCBkaXNwbGF5bGFiZWw7XG4gICAgICAgICAgICBpZiAodGhpcy5iaW5kZGlzcGxheWxhYmVsKSB7XG4gICAgICAgICAgICAgICAgYmluZERpc3BsYXlMYWJlbEFycmF5ID0gc3BsaXQodGhpcy5iaW5kZGlzcGxheWxhYmVsLCAnKycpO1xuICAgICAgICAgICAgICAgIGlmIChiaW5kRGlzcGxheUxhYmVsQXJyYXkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaW5jbHVkZXMoYmluZERpc3BsYXlMYWJlbEFycmF5WzBdLCAnfCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWdleCA9IC9cXFsoLio/KVxcXS87XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5bGFiZWwgPSByZWdleC5leGVjKGJpbmREaXNwbGF5TGFiZWxBcnJheVswXSlbMV07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5bGFiZWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChiaW5kRGlzcGxheUxhYmVsQXJyYXkubGVuZ3RoID4gMSB8fCAoZGlzcGxheWxhYmVsICYmICFpbmNsdWRlcyhzZWFyY2hLZXlBcnJheSwgZGlzcGxheWxhYmVsKSlcbiAgICAgICAgICAgICAgICB8fCAodGhpcy5kaXNwbGF5ZXhwcmVzc2lvbiAmJiAhaW5jbHVkZXMoc2VhcmNoS2V5QXJyYXksIHRoaXMuZGlzcGxheWV4cHJlc3Npb24pKSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkaW5nSXRlbXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2xhc3RRdWVyeSA9IHRoaXMucXVlcnk7XG4gICAgICAgIHJldHVybiBmcm9tKHRoaXMuZ2V0RGF0YVNvdXJjZShxdWVyeSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBoYW5kbGVFdmVudChub2RlOiBIVE1MRWxlbWVudCwgZXZlbnROYW1lOiBzdHJpbmcsIGV2ZW50Q2FsbGJhY2s6IEZ1bmN0aW9uLCBsb2NhbHM6IGFueSkge1xuICAgICAgICBpZiAoIWluY2x1ZGVzKFsnYmx1cicsICdmb2N1cycsICdzZWxlY3QnLCAnc3VibWl0JywgJ2NoYW5nZSddLCBldmVudE5hbWUpKSB7XG4gICAgICAgICAgICBzdXBlci5oYW5kbGVFdmVudChub2RlLCBldmVudE5hbWUsIGV2ZW50Q2FsbGJhY2ssIGxvY2Fscyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBoaWdobGlnaHQgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIGRyb3Bkb3duIG1hdGNoaW5nIHRoZSBxdWVyeS5cbiAgICBwcml2YXRlIGhpZ2hsaWdodChtYXRjaDogVHlwZWFoZWFkTWF0Y2gsIHF1ZXJ5OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZWFoZWFkQ29udGFpbmVyKSB7XG4gICAgICAgICAgICAvLyBoaWdobGlnaHQgb2YgY2hhcnMgd2lsbCB3b3JrIG9ubHkgd2hlbiBsYWJlbCBhcmUgc3RyaW5ncy5cbiAgICAgICAgICAgIChtYXRjaCBhcyBhbnkpLnZhbHVlID0gbWF0Y2guaXRlbS5sYWJlbC50b1N0cmluZygpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudHlwZWFoZWFkQ29udGFpbmVyLmhpZ2hsaWdodChtYXRjaCwgcXVlcnkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gaW5zZXJ0cyB0aGUgZWxlbWVudCBhdCB0aGUgaW5kZXggcG9zaXRpb25cbiAgICBwcml2YXRlIGluc2VydEF0SW5kZXgoaSkge1xuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnRFbC5wcmVwZW5kKHRoaXMuJGVsZW1lbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgJGVsQXRJbmRleCA9IHRoaXMucGFyZW50RWwuY2hpbGRyZW4oKS5lcShpKTtcbiAgICAgICAgICAgIGlmICgkZWxBdEluZGV4Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMucGFyZW50RWwuY2hpbGRyZW4oKS5lcShpKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuaW5zZXJ0QWZ0ZXIodGhpcy5wYXJlbnRFbC5jaGlsZHJlbigpLmVxKGkgLSAxKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgd2lkZ2V0IGlzIG9mIHR5cGUgYXV0b2NvbXBsZXRlIGluIG1vYmlsZSB2aWV3LyBhcHBcbiAgICBwdWJsaWMgaXNNb2JpbGVBdXRvQ29tcGxldGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdhdXRvY29tcGxldGUnICYmIGlzTW9iaWxlKCk7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHF1ZXJ5IGlzIGVudGVyZWQgaW4gdGhlIGlucHV0IGFuZCB0aGUgdmlldyBpcyBub3QgbW9iaWxlXG4gICAgcHVibGljIGlzUXVlcnlFbnRlcmVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zaG93Y2xlYXIgJiYgdGhpcy5zaG93Q2xvc2VidG47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkTW9yZURhdGEoaW5jcmVtZW50UGFnZT86IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YVByb3ZpZGVyLmlzTGFzdFBhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBJbmNyZWFzZSB0aGUgcGFnZSBudW1iZXIgYW5kIHRyaWdnZXIgZm9yY2UgcXVlcnkgdXBkYXRlXG4gICAgICAgIHRoaXMucGFnZSA9IGluY3JlbWVudFBhZ2UgPyB0aGlzLnBhZ2UgKyAxIDogdGhpcy5wYWdlO1xuXG4gICAgICAgIHRoaXMuaXNTY3JvbGxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IHRydWU7XG5cbiAgICAgICAgLy8gd2hlbiBpbnZva2luZyBuZXcgc2V0IG9mIHJlc3VsdHMsIHJlc2V0IHRoZSBsYXN0UXVlcnkuXG4gICAgICAgIGlmIChpbmNyZW1lbnRQYWdlKSB7XG4gICAgICAgICAgICB0aGlzLl9sYXN0UXVlcnkgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0cmlnZ2VyIHRoZSB0eXBlYWhlYWQgY2hhbmdlIG1hbnVhbGx5IHRvIGZldGNoIHRoZSBuZXh0IHNldCBvZiByZXN1bHRzLlxuICAgICAgICB0aGlzLnR5cGVhaGVhZC5vbklucHV0KHtcbiAgICAgICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB0cmltKHRoaXMucXVlcnkpIHx8ICcwJyAvLyBkdW1teSBkYXRhIHRvIG5vdGlmeSB0aGUgb2JzZXJ2YWJsZXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gb24gZm9jdXNvdXQsIHN1YnNjcmliZSB0byB0aGUgZGF0YXZhbHVlIGNoYW5nZXMgYWdhaW5cbiAgICBwcml2YXRlIG9uRm9jdXNPdXQoKSB7XG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlRHYgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fbG9hZGluZ0l0ZW1zID0gZmFsc2U7XG4gICAgICAgIC8vIHJlc2V0IHRoZSBwYWdlIHZhbHVlIG9uIGZvY3Vzb3V0LlxuICAgICAgICB0aGlzLnBhZ2UgPSAxO1xuICAgICAgICAvLyBpZiBkb21VcGRhdGVkIGlzIHRydWUgdGhlbiBkbyBub3QgaGlkZSB0aGUgZHJvcGRvd24gaW4gdGhlIGZ1bGxzY3JlZW5cbiAgICAgICAgaWYgKCF0aGlzLl9kb21VcGRhdGVkICYmIHRoaXMuX2lzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5saXN0ZW5RdWVyeSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzT3BlbiA9IGZhbHNlO1xuICAgICAgICAvLyBvbiBvdXRzaWRlIGNsaWNrLCB0eXBlYWhlYWQgaXMgaGlkZGVuLiBUbyBhdm9pZCB0aGlzLCB3aGVuIGZ1bGxzY3JlZW4gaXMgc2V0LCBvdmVycmlkZGluZyBpc0ZvY3VzZWQgZmxhZyBvbiB0aGUgdHlwZWFoZWFkIGNvbnRhaW5lclxuICAgICAgICBpZiAodGhpcy5fZG9tVXBkYXRlZCAmJiB0aGlzLnR5cGVhaGVhZCAmJiAodGhpcy50eXBlYWhlYWQgYXMgYW55KS5fY29udGFpbmVyKSB7XG4gICAgICAgICAgICAodGhpcy50eXBlYWhlYWQgYXMgYW55KS5fY29udGFpbmVyLmlzRm9jdXNlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uSW5wdXRDaGFuZ2UoJGV2ZW50KSB7XG4gICAgICAgIC8vIHJlc2V0IGFsbCB0aGUgcHJldmlvdXMgcGFnZSBkZXRhaWxzIGluIG9yZGVyIHRvIGZldGNoIG5ldyBzZXQgb2YgcmVzdWx0LlxuICAgICAgICB0aGlzLnJlc3VsdCA9IFtdO1xuICAgICAgICB0aGlzLnBhZ2UgPSAxO1xuICAgICAgICB0aGlzLmxpc3RlblF1ZXJ5ID0gdGhpcy5pc1VwZGF0ZU9uS2V5UHJlc3MoKTtcbiAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIC8vIHdoZW4gaW5wdXQgaXMgY2xlYXJlZCwgcmVzZXQgdGhlIGRhdGF2YWx1ZVxuICAgICAgICBpZiAodGhpcy5xdWVyeSA9PT0gJycpIHtcbiAgICAgICAgICAgIHRoaXMucXVlcnlNb2RlbCA9ICcnO1xuICAgICAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gJyc7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVByZXZEYXRhdmFsdWUodGhpcy5fbGFzdFF1ZXJ5KTtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5fbW9kZWxCeVZhbHVlLCB7fSwgdHJ1ZSk7XG5cbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnY2xlYXInLCB7ICRldmVudCB9KTtcblxuICAgICAgICAgICAgLy8gdHJpZ2dlciBvblN1Ym1pdCBvbmx5IHdoZW4gdGhlIHNlYXJjaCBpbnB1dCBpcyBjbGVhcmVkIG9mZiBhbmQgZG8gbm90IHRyaWdnZXIgd2hlbiB0YWIgaXMgcHJlc3NlZC5cbiAgICAgICAgICAgIGlmICgkZXZlbnQgJiYgJGV2ZW50LndoaWNoICE9PSA5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzdWJtaXQnLCB7ICRldmVudCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGludm9raW5nIGNoYW5nZSBldmVudCBvbiBldmVyeSBpbnB1dCB2YWx1ZSBjaGFuZ2UuXG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICAkZXZlbnQ6ICRldmVudCxcbiAgICAgICAgICAgICAgICBuZXdWYWw6IHRoaXMuX21vZGVsQnlWYWx1ZSB8fCB0aGlzLnF1ZXJ5LFxuICAgICAgICAgICAgICAgIG9sZFZhbDogKHRoaXMgYXMgYW55KS5wcmV2RGF0YXZhbHVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNob3dDbG9zZWJ0biA9ICh0aGlzLnF1ZXJ5ICE9PSAnJyk7XG4gICAgfVxuXG4gICAgLy8gVHJpZ2dlcmVkIGZvciBlbnRlciBldmVudFxuICAgIHByaXZhdGUgaGFuZGxlRW50ZXJFdmVudCgkZXZlbnQpIHtcbiAgICAgICAgLy8gc3VibWl0IGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZXJlIGlzIG5vIHNlYXJjaCByZXN1bHRzXG4gICAgICAgIGlmICghZ2V0KHRoaXMudHlwZWFoZWFkLCAnbWF0Y2hlcy5sZW5ndGgnKSkge1xuICAgICAgICAgICAgdGhpcy5vblNlYXJjaFNlbGVjdCgkZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFRyaWdnZXJyZWQgd2hlbiB0eXBlYWhlYWQgb3B0aW9uIGlzIHNlbGVjdGVkLlxuICAgIHByaXZhdGUgb25TZWFyY2hTZWxlY3QoJGV2ZW50OiBFdmVudCkge1xuICAgICAgICBsZXQgaXRlbTtcbiAgICAgICAgLy8gV01TLTIyNTMzOiBCZWZvcmUgYWRkaW5nIGFjdGl2ZSB0eXBlYWhlYWQgZWwsIGNoZWNrIGlmIHRoZSBlbnRlcmVkIHF1ZXJ5IG1hdGNoZXMgd2l0aCB0aGUgYWN0aXZlIGVsIG9yIG5vdFxuICAgICAgICBjb25zdCBpc1F1ZXJ5TWF0Y2ggPSB0aGlzLnR5cGVhaGVhZENvbnRhaW5lcj8uYWN0aXZlPy52YWx1ZSA9PT0gdGhpcy5xdWVyeTtcblxuICAgICAgICBpZiAodGhpcy50eXBlYWhlYWRDb250YWluZXIgJiYgdGhpcy50eXBlYWhlYWRDb250YWluZXIuYWN0aXZlICYmIGlzUXVlcnlNYXRjaCkge1xuICAgICAgICAgICAgaXRlbSA9IHRoaXMudHlwZWFoZWFkQ29udGFpbmVyLmFjdGl2ZS5pdGVtO1xuICAgICAgICB9XG4gICAgICAgICRldmVudCA9IHRoaXMuZXZlbnREYXRhKCRldmVudCwgaXRlbSB8fCB7fSk7XG5cbiAgICAgICAgLy8gc2VhcmNoT24gaXMgc2V0IGFzIG9uQnRuQ2xpY2ssIHRoZW4gaW52b2tlIHRoZSBzZWFyY2ggYXBpIGNhbGwgbWFudWFsbHkuXG4gICAgICAgIGlmICghdGhpcy5pc1VwZGF0ZU9uS2V5UHJlc3MoKSkge1xuICAgICAgICAgICAgdGhpcy5saXN0ZW5RdWVyeSA9IHRydWU7XG4gICAgICAgICAgICAvLyB0cmlnZ2VyIHRoZSB0eXBlYWhlYWQgY2hhbmdlIG1hbnVhbGx5IHRvIGZldGNoIHRoZSBuZXh0IHNldCBvZiByZXN1bHRzLlxuICAgICAgICAgICAgdGhpcy50eXBlYWhlYWQub25JbnB1dCh7XG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnF1ZXJ5IC8vIGR1bW15IGRhdGEgdG8gbm90aWZ5IHRoZSBvYnNlcnZhYmxlc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHdoZW4gbWF0Y2hlcyBhcmUgYXZhaWxhYmxlLlxuICAgICAgICBpZiAodGhpcy50eXBlYWhlYWRDb250YWluZXIgJiYgdGhpcy5saUVsZW1lbnRzLmxlbmd0aCAmJiBpc1F1ZXJ5TWF0Y2gpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZWFoZWFkQ29udGFpbmVyLnNlbGVjdEFjdGl2ZU1hdGNoKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5TW9kZWwgPSB0aGlzLnF1ZXJ5O1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzdWJtaXQnLCB7ICRldmVudCB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW52b2tlT25CZWZvcmVTZXJ2aWNlQ2FsbChpbnB1dERhdGEpIHtcbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVzZXJ2aWNlY2FsbCcsIHsgaW5wdXREYXRhIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25Ecm9wZG93bk9wZW4oKSB7XG4gICAgICAgIGlmICh0aGlzLmNsZWFyRGF0YSkge1xuICAgICAgICAgICAgdGhpcy50eXBlYWhlYWQuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNldHRpbmcgdGhlIHVsRWxlbWVudHMsIGxpRWxlbWVudCBvbiB0eXBlYWhlYWRDb250YWluZXIuXG4gICAgICAgIC8vIGFzIHdlIGFyZSB1c2luZyBjdXN0b21PcHRpb24gdGVtcGxhdGUsIGxpRWxlbWVudHMgYXJlIG5vdCBhdmFpbGFibGUgb24gdHlwZWFoZWFkQ29udGFpbmVyIHNvIGFwcGVuZCB0aGVtIGV4cGxpY2l0bHkuXG4gICAgICAgIGNvbnN0IGZuID0gZGVib3VuY2UoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5faXNPcGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMudHlwZWFoZWFkQ29udGFpbmVyID0gdGhpcy50eXBlYWhlYWQuX2NvbnRhaW5lciB8fCAodGhpcy50eXBlYWhlYWQgYXMgYW55KS5fdHlwZWFoZWFkLmluc3RhbmNlO1xuICAgICAgICAgICAgKHRoaXMudHlwZWFoZWFkQ29udGFpbmVyIGFzIGFueSkubGlFbGVtZW50cyA9IHRoaXMubGlFbGVtZW50cztcbiAgICAgICAgICAgICh0aGlzLnR5cGVhaGVhZENvbnRhaW5lciBhcyBhbnkpLnVsRWxlbWVudCA9IHRoaXMudWxFbGVtZW50O1xuICAgICAgICAgICAgYWRqdXN0Q29udGFpbmVyUG9zaXRpb24oJCgndHlwZWFoZWFkLWNvbnRhaW5lcicpLCB0aGlzLm5hdGl2ZUVsZW1lbnQsICh0aGlzLnR5cGVhaGVhZCBhcyBhbnkpLl90eXBlYWhlYWQsICQoJ3R5cGVhaGVhZC1jb250YWluZXIgLmRyb3Bkb3duLW1lbnUnKSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm4oKTtcblxuICAgICAgICAvLyBvcGVuIGZ1bGwtc2NyZWVuIHNlYXJjaCB2aWV3XG4gICAgICAgIGlmICh0aGlzLmlzTW9iaWxlQXV0b0NvbXBsZXRlKCkpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnZnVsbC1zY3JlZW4nKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyTW9iaWxlQXV0b0NvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkcm9wZG93bkVsID0gdGhpcy5kcm9wZG93bkVsLmNsb3Nlc3QoJ3R5cGVhaGVhZC1jb250YWluZXInKTtcblxuICAgICAgICAgICAgZHJvcGRvd25FbC5pbnNlcnRBZnRlcih0aGlzLiRlbGVtZW50LmZpbmQoJ2lucHV0JykuZmlyc3QoKSk7XG4gICAgICAgICAgICBjb25zdCBzY3JlZW5IZWlnaHQgPSB0aGlzLiRlbGVtZW50LmNsb3Nlc3QoJy5hcHAtY29udGVudCcpLmhlaWdodCgpO1xuICAgICAgICAgICAgZHJvcGRvd25FbC5jc3MoeyBwb3NpdGlvbjogJ3JlbGF0aXZlJywgdG9wOiAwLCBoZWlnaHQ6IHNjcmVlbkhlaWdodCArICdweCcgfSk7XG4gICAgICAgICAgICB0aGlzLnNob3dDbG9zZWJ0biA9IHRoaXMucXVlcnkgJiYgdGhpcy5xdWVyeSAhPT0gJyc7XG5cbiAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQodGhpcy5kYXRhUHJvdmlkZXIuaXNMYXN0UGFnZSkgJiYgIXRoaXMuZGF0YVByb3ZpZGVyLmlzTGFzdFBhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJTZWFyY2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2VsZWN0TmV4dCgpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHRoaXMudHlwZWFoZWFkQ29udGFpbmVyLm1hdGNoZXM7XG5cbiAgICAgICAgaWYgKCFtYXRjaGVzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kZXggPSBtYXRjaGVzLmluZGV4T2YodGhpcy50eXBlYWhlYWRDb250YWluZXIuYWN0aXZlKTtcblxuICAgICAgICAvLyBvbiBrZXlkb3duLCBpZiBzY3JvbGwgaXMgYXQgdGhlIGJvdHRvbSBhbmQgbmV4dCBwYWdlIHJlY29yZHMgYXJlIGF2YWlsYWJsZSwgZmV0Y2ggbmV4dCBwYWdlIGl0ZW1zLlxuICAgICAgICBpZiAoIXRoaXMuX2xvYWRpbmdJdGVtcyAmJiAhdGhpcy5kYXRhUHJvdmlkZXIuaXNMYXN0UGFnZSAmJiBpbmRleCArIDEgPiBtYXRjaGVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIC8vIGluZGV4IGlzIHNhdmVkIGluIG9yZGVyIHRvIHNlbGVjdCB0aGUgbGFzdFNlbGVjdGVkIGl0ZW0gaW4gdGhlIGRyb3Bkb3duIGFmdGVyIGZldGNoaW5nIG5leHQgcGFnZSBpdGVtcy5cbiAgICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkSW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgIHRoaXMubG9hZE1vcmVEYXRhKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRMYXN0QWN0aXZlTWF0Y2hBc1NlbGVjdGVkKCkge1xuICAgICAgICBpZiAodGhpcy5sYXN0U2VsZWN0ZWRJbmRleCkge1xuICAgICAgICAgICAgKHRoaXMudHlwZWFoZWFkQ29udGFpbmVyIGFzIGFueSkuX2FjdGl2ZSA9IHRoaXMudHlwZWFoZWFkQ29udGFpbmVyLm1hdGNoZXNbdGhpcy5sYXN0U2VsZWN0ZWRJbmRleF07XG4gICAgICAgICAgICB0aGlzLnR5cGVhaGVhZENvbnRhaW5lci5uZXh0QWN0aXZlTWF0Y2goKTtcbiAgICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkSW5kZXggPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHRyaWdnZXJTZWFyY2goKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGFQcm92aWRlci5pc0xhc3RQYWdlIHx8ICF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdmdWxsLXNjcmVlbicpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdHlwZUFoZWFkRHJvcERvd24gPSB0aGlzLmRyb3Bkb3duRWw7XG4gICAgICAgIGNvbnN0ICRsYXN0SXRlbSA9IHR5cGVBaGVhZERyb3BEb3duLmZpbmQoJ2xpJykubGFzdCgpO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIGxhc3QgaXRlbSBpcyBub3QgYmVsb3cgdGhlIGZ1bGwgc2NyZWVuXG4gICAgICAgIGlmICgkbGFzdEl0ZW0ubGVuZ3RoICYmIHR5cGVBaGVhZERyb3BEb3duLmxlbmd0aCAmJiAodHlwZUFoZWFkRHJvcERvd24uaGVpZ2h0KCkgKyB0eXBlQWhlYWREcm9wRG93bi5wb3NpdGlvbigpLnRvcCA+ICRsYXN0SXRlbS5oZWlnaHQoKSArICRsYXN0SXRlbS5wb3NpdGlvbigpLnRvcCkpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZE1vcmVEYXRhKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1VwZGF0ZU9uS2V5UHJlc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlYXJjaG9uID09PSAndHlwaW5nJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlYm91bmNlRGVmYXVsdFF1ZXJ5KGRhdGEpIHtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFF1ZXJ5SW52b2tlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZ2V0RGF0YVNvdXJjZShkYXRhLCB0cnVlKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMucXVlcnlNb2RlbCA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RRdWVyeSA9IHRoaXMucXVlcnkgPSB0aGlzLnF1ZXJ5TW9kZWxbMF0ubGFiZWwgfHwgJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gdGhpcy5xdWVyeU1vZGVsWzBdLnZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX21vZGVsQnlLZXkgPSB0aGlzLnF1ZXJ5TW9kZWxbMF0ua2V5O1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Nsb3NlYnRuID0gKHRoaXMucXVlcnkgIT09ICcnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRoaXMucXVlcnlNb2RlbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5ID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jbGVhckRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0KCh0aGlzLnR5cGVhaGVhZCBhcyBhbnkpLCAnX3R5cGVhaGVhZC5pc1Nob3duJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlYWhlYWQuaGlkZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVCeURhdGF2YWx1ZShkYXRhKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQnlEYXRhc2V0KGRhdGEpO1xuICAgICAgICB0aGlzLnVwZGF0ZUJ5RGF0YVNvdXJjZShkYXRhKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUJ5RGF0YVNvdXJjZShkYXRhKSB7XG4gICAgICAgIC8vIHZhbHVlIGlzIHByZXNlbnQgYnV0IHRoZSBjb3JyZXNwb25kaW5nIGtleSBpcyBub3QgZm91bmQgdGhlbiBmZXRjaCBuZXh0IHNldFxuICAgICAgICAvLyBtb2RlbEJ5S2V5IHdpbGwgYmUgc2V0IG9ubHkgd2hlbiBkYXRhdmFsdWUgaXMgYXZhaWxhYmxlIGluc2lkZSB0aGUgbG9jYWxEYXRhIG90aGVyd2lzZSBtYWtlIGEgTi93IGNhbGwuXG4gICAgICAgIGlmIChpc0RlZmluZWQoZGF0YSkgJiYgIWlzT2JqZWN0KGRhdGEpICYmIHRoaXMuZGF0YXNvdXJjZSAmJiAhaXNEZWZpbmVkKHRoaXMuX21vZGVsQnlLZXkpICYmIHRoaXMuZGF0YWZpZWxkICE9PSBBTExGSUVMRFMpIHtcbiAgICAgICAgICAgIC8vIEF2b2lkIG1ha2luZyBkZWZhdWx0IHF1ZXJ5IGlmIHF1ZXJ5TW9kZWwgYWxyZWFkeSBleGlzdHMuXG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHRoaXMucXVlcnlNb2RlbCkgJiYgIWlzRW1wdHkodGhpcy5xdWVyeU1vZGVsKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRGF0YXZhbHVlRnJvbVF1ZXJ5TW9kZWwoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE1ha2UgZGVmYXVsdCBxdWVyeSBjYWxsIG9ubHkgd2hlbiBkYXRhc291cmNlIHN1cHBvcnRzIENSVUQgKGxpdmUgdmFyaWFibGUpLlxuICAgICAgICAgICAgaWYgKCF0aGlzLl9kZWZhdWx0UXVlcnlJbnZva2VkICYmIHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLlNVUFBPUlRTX0NSVUQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWJvdW5jZURlZmF1bHRRdWVyeShkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHVwZGF0ZXMgdGhlIG1vZGVsIHZhbHVlIHVzaW5nIHF1ZXJ5TW9kZWxcbiAgICBwcml2YXRlIHVwZGF0ZURhdGF2YWx1ZUZyb21RdWVyeU1vZGVsKCkge1xuICAgICAgICBpZiAoaXNEZWZpbmVkKHRoaXMucXVlcnlNb2RlbCkpIHtcbiAgICAgICAgICAgIHRoaXMuX21vZGVsQnlWYWx1ZSA9IGlzQXJyYXkodGhpcy5xdWVyeU1vZGVsKSA/ICh0aGlzLnF1ZXJ5TW9kZWxbMF0gYXMgRGF0YVNldEl0ZW0pLnZhbHVlIDogdGhpcy5xdWVyeU1vZGVsO1xuICAgICAgICAgICAgdGhpcy5fbW9kZWxCeUtleSA9IGlzQXJyYXkodGhpcy5xdWVyeU1vZGVsKSA/ICh0aGlzLnF1ZXJ5TW9kZWxbMF0gYXMgRGF0YVNldEl0ZW0pLmtleSA6IHRoaXMucXVlcnlNb2RlbDtcbiAgICAgICAgICAgIHRoaXMudG9CZVByb2Nlc3NlZERhdGF2YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQnlEYXRhc2V0KGRhdGE6IGFueSkge1xuICAgICAgICAvLyBkZWZhdWx0IHF1ZXJ5IGlzIGFscmVhZHkgaW52b2tlZCB0aGVuIGRvIG5vdCBtYWtlIG90aGVyIGRlZmF1bHQgcXVlcnkgY2FsbC5cbiAgICAgICAgLy8gRm9yIGxvY2FsIHNlYXJjaCBpLmUuIHNlYXJjaGtleSBpcyB1bmRlZmluZWQsIGRvIG5vdCByZXR1cm4sIHZlcmlmeSB0aGUgZGF0YXZhbHVlIGFnYWluc3QgdGhlIGRhdGFzZXRJdGVtcyAuXG4gICAgICAgIGlmICh0aGlzLl9kZWZhdWx0UXVlcnlJbnZva2VkICYmIHRoaXMuc2VhcmNoa2V5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gZmluZCh0aGlzLmRhdGFzZXRJdGVtcywgKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoaXNPYmplY3QoaXRlbS52YWx1ZSkgPyBpc0VxdWFsKGl0ZW0udmFsdWUsIGRhdGEpIDogKHRvU3RyaW5nKGl0ZW0udmFsdWUpKS50b0xvd2VyQ2FzZSgpID09PSAodG9TdHJpbmcoZGF0YSkpLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBzZXQgdGhlIGRlZmF1bHQgb25seSB3aGVuIGl0IGlzIGF2YWlsYWJsZSBpbiBkYXRhc2V0LlxuICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5TW9kZWwgPSBbc2VsZWN0ZWRJdGVtXTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhdGFmaWVsZCA9PT0gQUxMRklFTERTICYmIGlzT2JqZWN0KGRhdGEpKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5TW9kZWwgPSB0aGlzLmdldFRyYW5zZm9ybWVkRGF0YShleHRyYWN0RGF0YUFzQXJyYXkoZGF0YSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcmVzZXR0aW5nIHRoZSBxdWVyeU1vZGVsIG9ubHkgd2hlbiBwcmV2RGF0YXZhbHVlIGlzIGVxdWFsIHRvIGRhdGFcbiAgICAgICAgICAgIGlmICgodGhpcyBhcyBhbnkpLnByZXZEYXRhdmFsdWUgIT09IGRhdGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5TW9kZWwgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeSA9ICcnO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZURhdGF2YWx1ZUZyb21RdWVyeU1vZGVsKCk7XG5cbiAgICAgICAgLy8gU2hvdyB0aGUgbGFiZWwgdmFsdWUgb24gaW5wdXQuXG4gICAgICAgIHRoaXMuX2xhc3RRdWVyeSA9IHRoaXMucXVlcnkgPSBpc0RlZmluZWQodGhpcy5xdWVyeU1vZGVsKSAmJiB0aGlzLnF1ZXJ5TW9kZWwubGVuZ3RoID8gZ2V0KHRoaXMucXVlcnlNb2RlbFswXSwgJ2xhYmVsJykgOiAnJztcbiAgICAgICAgdGhpcy5zaG93Q2xvc2VidG4gPSAodGhpcy5xdWVyeSAhPT0gJycpO1xuICAgIH1cblxuICAgIC8vIElmIHdlIGhhdmUgbGFzdCBzZWFyY2ggcmVzdWx0cyB0aGVuIG9wZW4gZHJvcGRvd24gb24gZm9jdXNcbiAgICBwcml2YXRlIGhhbmRsZUZvY3VzKCRldmVudCkge1xuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnc2VhcmNoJyAmJiB0aGlzLnF1ZXJ5ID09PSB0aGlzLl9sYXN0UXVlcnkgJiYgdGhpcy5fbGFzdFJlc3VsdCkge1xuICAgICAgICAgICAgKHRoaXMudHlwZWFoZWFkIGFzIGFueSkua2V5VXBFdmVudEVtaXR0ZXIuZW1pdCh0aGlzLnF1ZXJ5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBub3RpZnlTdWJzY3JpYmVyKCkge1xuICAgICAgICBjb25zdCBwYXJlbnRFbCA9ICQodGhpcy5uYXRpdmVFbGVtZW50KS5jbG9zZXN0KCcuYXBwLWNvbXBvc2l0ZS13aWRnZXQuY2FwdGlvbi1mbG9hdGluZycpO1xuICAgICAgICBpZiAocGFyZW50RWwubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5hcHAubm90aWZ5KCdjYXB0aW9uUG9zaXRpb25BbmltYXRlJywge2Rpc3BsYXlWYWw6IHRydWUsIG5hdGl2ZUVsOiBwYXJlbnRFbH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyBhIHByb21pc2UgdGhhdCBwcm92aWRlcyB0aGUgZmlsdGVyZWQgZGF0YSBmcm9tIHRoZSBkYXRhc291cmNlLlxuICAgIHB1YmxpYyBnZXREYXRhU291cmNlKHF1ZXJ5OiBBcnJheTxzdHJpbmc+IHwgc3RyaW5nLCBzZWFyY2hPbkRhdGFGaWVsZD86IGJvb2xlYW4sIG5leHRJdGVtSW5kZXg/OiBudW1iZXIpOiBQcm9taXNlPERhdGFTZXRJdGVtW10+IHtcbiAgICAgICAgLy8gRm9yIGRlZmF1bHQgcXVlcnksIHNlYXJjaE9uRGF0YUZpZWxkIGlzIHNldCB0byB0cnVlLCB0aGVuIGRvIG5vdCBtYWtlIGEgbi93IGNhbGwgd2hlbiBkYXRhZmllbGQgaXMgQUxMRklFTERTXG4gICAgICAgIGlmIChzZWFyY2hPbkRhdGFGaWVsZCAmJiB0aGlzLmRhdGFmaWVsZCA9PT0gQUxMRklFTERTKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2FkaW5nSXRlbXMgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRm9yIGRlZmF1bHQgZGF0YXZhbHVlLCBzZWFyY2gga2V5IGFzIHRvIGJlIG9uIGRhdGFmaWVsZCB0byBnZXQgdGhlIGRlZmF1bHQgZGF0YSBmcm9tIHRoZSBmaWx0ZXIgY2FsbC5cbiAgICAgICAgY29uc3QgZGF0YUNvbmZpZzogSURhdGFQcm92aWRlckNvbmZpZyA9IHtcbiAgICAgICAgICAgIGRhdGFzZXQ6IHRoaXMuZGF0YXNldCA/IGNvbnZlcnREYXRhVG9PYmplY3QodGhpcy5kYXRhc2V0KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGJpbmRkYXRhc2V0OiB0aGlzLmJpbmRkYXRhc2V0LFxuICAgICAgICAgICAgZGF0YXNvdXJjZTogdGhpcy5kYXRhc291cmNlLFxuICAgICAgICAgICAgZGF0YWZpZWxkOiB0aGlzLmRhdGFmaWVsZCxcbiAgICAgICAgICAgIGhhc0RhdGE6IHRoaXMuZGF0YXNldCAmJiB0aGlzLmRhdGFzZXQubGVuZ3RoLFxuICAgICAgICAgICAgcXVlcnk6IHF1ZXJ5LFxuICAgICAgICAgICAgaXNMb2NhbEZpbHRlcjogIXRoaXMuc2VhcmNoa2V5LFxuICAgICAgICAgICAgc2VhcmNoS2V5OiBzZWFyY2hPbkRhdGFGaWVsZCA/IHRoaXMuZGF0YWZpZWxkIDogdGhpcy5zZWFyY2hrZXksXG4gICAgICAgICAgICAvLyBkZWZhdWx0IHNlYXJjaCBjYWxsIG1hdGNoIG1vZGUgc2hvdWxkIGJlIHN0YXJ0aWdub3JlY2FzZVxuICAgICAgICAgICAgbWF0Y2hNb2RlOiBzZWFyY2hPbkRhdGFGaWVsZCA/ICdzdGFydGlnbm9yZWNhc2UnIDogdGhpcy5tYXRjaG1vZGUsXG4gICAgICAgICAgICBjYXNlc2Vuc2l0aXZlOiB0aGlzLmNhc2VzZW5zaXRpdmUsXG4gICAgICAgICAgICBpc2Zvcm1maWVsZDogdGhpcy5pc2Zvcm1maWVsZCxcbiAgICAgICAgICAgIG9yZGVyYnk6IHRoaXMub3JkZXJieSxcbiAgICAgICAgICAgIGxpbWl0OiB0aGlzLmxpbWl0LFxuICAgICAgICAgICAgcGFnZXNpemU6IHRoaXMucGFnZXNpemUsXG4gICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXG4gICAgICAgICAgICBvbkJlZm9yZXNlcnZpY2VjYWxsOiB0aGlzLmludm9rZU9uQmVmb3JlU2VydmljZUNhbGwuYmluZCh0aGlzKVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLmRhdGFvcHRpb25zKSB7XG4gICAgICAgICAgICBkYXRhQ29uZmlnLmRhdGFvcHRpb25zID0gdGhpcy5kYXRhb3B0aW9ucztcbiAgICAgICAgICAgIGRhdGFDb25maWcudmlld1BhcmVudCA9IHRoaXMudmlld1BhcmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVByb3ZpZGVyLmZpbHRlcihkYXRhQ29uZmlnKVxuICAgICAgICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAvLyByZXNwb25zZSBmcm9tIGRhdGFQcm92aWRlciByZXR1cm5zIGFsd2F5cyBkYXRhIG9iamVjdC5cbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IHJlc3BvbnNlLmRhdGEgfHwgcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgLy8gZm9yIHNlcnZpY2UgdmFyaWFibGUsIHVwZGF0aW5nIHRoZSBkYXRhc2V0IG9ubHkgaWYgaXQgaXMgbm90IGRlZmluZWQgb3IgZW1wdHlcbiAgICAgICAgICAgICAgICBpZiAoKCFpc0RlZmluZWQodGhpcy5kYXRhc2V0KSB8fCAhdGhpcy5kYXRhc2V0Lmxlbmd0aCkgJiYgdGhpcy5kYXRhUHJvdmlkZXIudXBkYXRlRGF0YXNldCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFzZXQgPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhUHJvdmlkZXIuaGFzTW9yZURhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWREYXRhc2V0ID0gdGhpcy5mb3JtYXR0ZWREYXRhc2V0LmNvbmNhdChyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWREYXRhc2V0ID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gZXhwbGljaXRseSBzZXR0aW5nIHRoZSBvcHRpb25zbGltaXQgYXMgdGhlIG1hdGNoZXMgbW9yZSB0aGFuIDIwIHdpbGwgYmUgaWdub3JlZCBpZiBvcHRpb25zbGltaXQgaXMgbm90IHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mb3JtYXR0ZWREYXRhc2V0Lmxlbmd0aCA+IDIwICYmICFpc0RlZmluZWQodGhpcy5saW1pdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlYWhlYWQudHlwZWFoZWFkT3B0aW9uc0xpbWl0ID0gdGhpcy5mb3JtYXR0ZWREYXRhc2V0Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBJbiBtb2JpbGUsIHRyaWdnZXIgdGhlIHNlYXJjaCBieSBkZWZhdWx0IHVudGlsIHRoZSByZXN1bHRzIGhhdmUgaGVpZ2h0IHVwdG8gcGFnZSBoZWlnaHQuIE90aGVyIHJlc3VsdHMgY2FuIGJlIGZldGNoZWQgYnkgc2Nyb2xsaW5nXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc09wZW4gJiYgdGhpcy5pc01vYmlsZUF1dG9Db21wbGV0ZSgpICYmICFpc1VuZGVmaW5lZCh0aGlzLmRhdGFQcm92aWRlci5pc0xhc3RQYWdlKSAmJiAhdGhpcy5kYXRhUHJvdmlkZXIuaXNMYXN0UGFnZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJTZWFyY2goKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZERhdGEgPSB0aGlzLmdldFRyYW5zZm9ybWVkRGF0YSh0aGlzLmZvcm1hdHRlZERhdGFzZXQsIG5leHRJdGVtSW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgLy8gcmVzdWx0IGNvbnRhaW5zIHRoZSBkYXRhZmllbGQgdmFsdWVzLlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdCA9IG1hcCh0cmFuc2Zvcm1lZERhdGEsICd2YWx1ZScpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZERhdGE7XG4gICAgICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkaW5nSXRlbXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICApLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1Njcm9sbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIChkZWJvdW5jZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExhc3RBY3RpdmVNYXRjaEFzU2VsZWN0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMzApKSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU2Nyb2xsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gV2hlbiBubyByZXN1bHQgaXMgZm91bmQsIHNldCB0aGUgZGF0YXZhbHVlIHRvIHVuZGVmaW5lZC5cbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5TW9kZWwgPSAocXVlcnkgYXMgc3RyaW5nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gb24gZm9jdXNvdXQgaS5lLiBvbiBvdGhlciB3aWRnZXQgZm9jdXMsIGlmIG4vdyBpcyBwZW5kaW5nIGxvYWRpbmcgaWNvbiBpcyBzaG93biwgd2hlbiBkYXRhIGlzIGF2YWlsYWJsZSB0aGVuIGRyb3Bkb3duIGlzIHNob3duIGFnYWluLlxuICAgICAgICAgICAgICAgIC8vIG9uIHVuc3Vic2NyaWJpbmcgZG8gbm90IHNob3cgdGhlIHJlc3VsdHMuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Vuc3Vic2NyaWJlRHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RSZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHBhcmVudCBjb250ZXh0IGkuZS4gUGFnZSBjb250ZXh0IGFuZCBub3QgcGFyZW50IGNvbXBvbmVudCdzIGNvbnRleHQuXG4gICAgcHJpdmF0ZSBnZXRDb250ZXh0KGNvbnRleHQpIHtcbiAgICAgICAgaWYgKGNvbnRleHQgJiYgZ2V0KGNvbnRleHQsICd3aWRnZXQnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29udGV4dChjb250ZXh0LnZpZXdQYXJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUcmFuc2Zvcm1lZERhdGEoZGF0YTogYW55LCBpdGVtSW5kZXg/OiBudW1iZXIsIGlzY3VzdG9tPzogYm9vbGVhbik6IERhdGFTZXRJdGVtW10ge1xuICAgICAgICBpZiAoaXNEZWZpbmVkKGl0ZW1JbmRleCkpIHtcbiAgICAgICAgICAgIGl0ZW1JbmRleCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWREYXRhID0gdHJhbnNmb3JtRm9ybURhdGEoXG4gICAgICAgICAgICB0aGlzLmdldENvbnRleHQodGhpcy52aWV3UGFyZW50KSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICB0aGlzLmRhdGFmaWVsZCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5RmllbGQ6IHRoaXMuZGlzcGxheWxhYmVsIHx8IHRoaXMuZGlzcGxheWZpZWxkLFxuICAgICAgICAgICAgICAgIGRpc3BsYXlFeHByOiBpc2N1c3RvbSA/ICcnIDogdGhpcy5kaXNwbGF5ZXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICBiaW5kRGlzcGxheUV4cHI6IGlzY3VzdG9tID8gJycgOiB0aGlzLmJpbmRkaXNwbGF5bGFiZWwsXG4gICAgICAgICAgICAgICAgYmluZERpc3BsYXlJbWdTcmM6IHRoaXMuYmluZGRpc3BsYXlpbWFnZXNyYyxcbiAgICAgICAgICAgICAgICBkaXNwbGF5SW1nU3JjOiB0aGlzLmRpc3BsYXlpbWFnZXNyY1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGl0ZW1JbmRleCxcbiAgICAgICAgICAgIHRoaXNcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGdldFVuaXFPYmpzQnlEYXRhRmllbGQodHJhbnNmb3JtZWREYXRhLCB0aGlzLmRhdGFmaWVsZCwgdGhpcy5kaXNwbGF5ZmllbGQgfHwgdGhpcy5kaXNwbGF5bGFiZWwsIHRvQm9vbGVhbih0aGlzLmFsbG93ZW1wdHkpKTtcbiAgICB9XG5cbiAgICAvLyBPcHRpb25zTGlzdFRlbXBsYXRlIGxpc3RlbnMgdG8gdGhlIHNjcm9sbCBldmVudCBhbmQgdHJpZ2dlcnMgdGhpcyBmdW5jdGlvbi5cbiAgICBwdWJsaWMgb25TY3JvbGwoJHNjcm9sbEVsOiBFbGVtZW50LCBldnQ6IEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHRvdGFsSGVpZ2h0ID0gJHNjcm9sbEVsLnNjcm9sbEhlaWdodCxcbiAgICAgICAgICAgIGNsaWVudEhlaWdodCA9ICRzY3JvbGxFbC5jbGllbnRIZWlnaHQ7XG5cbiAgICAgICAgLy8gSWYgc2Nyb2xsIGlzIGF0IHRoZSBib3R0b20gYW5kIG5vIHJlcXVlc3QgaXMgaW4gcHJvZ3Jlc3MgYW5kIG5leHQgcGFnZSByZWNvcmRzIGFyZSBhdmFpbGFibGUsIGZldGNoIG5leHQgcGFnZSBpdGVtcy5cbiAgICAgICAgaWYgKCF0aGlzLl9sb2FkaW5nSXRlbXMgJiYgIXRoaXMuZGF0YVByb3ZpZGVyLmlzTGFzdFBhZ2UgJiYgKCRzY3JvbGxFbC5zY3JvbGxUb3AgKyBjbGllbnRIZWlnaHQgPj0gdG90YWxIZWlnaHQpKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRNb3JlRGF0YSh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgICAgICBpZiAoIWlzRGVmaW5lZCh0aGlzLm1pbmNoYXJzKSkge1xuICAgICAgICAgICAgLy8gZm9yIGF1dG9jb21wbGV0ZSBzZXQgdGhlIG1pbmNoYXJzIHRvIDBcbiAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdhdXRvY29tcGxldGUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5taW5jaGFycyA9IDA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubWluY2hhcnMgPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5saXN0ZW5RdWVyeSA9IHRoaXMuaXNVcGRhdGVPbktleVByZXNzKCk7XG5cbiAgICAgICAgLy8gYnkgZGVmYXVsdCBmb3IgYXV0b2NvbXBsZXRlIGRvIG5vdCBzaG93IHRoZSBzZWFyY2ggaWNvblxuICAgICAgICAvLyBieSBkZWZhdWx0IHNob3cgdGhlIHNlYXJjaGljb24gZm9yIHR5cGUgPSBzZWFyY2hcbiAgICAgICAgdGhpcy5zaG93c2VhcmNoaWNvbiA9IGlzRGVmaW5lZCh0aGlzLnNob3dzZWFyY2hpY29uKSA/IHRoaXMuc2hvd3NlYXJjaGljb24gOiAodGhpcy50eXBlID09PSAnc2VhcmNoJyk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG5cbiAgICAgICAgc3R5bGVyKHRoaXMubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCwgdGhpcyk7XG4gICAgICAgIHRoaXMuY29udGFpbmVyVGFyZ2V0ID0gZ2V0Q29udGFpbmVyVGFyZ2V0Q2xhc3ModGhpcy5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgICAgICBjb25zdCBzZWFyY2hJbnB1dEVsID0gJCgnLmFwcC1zZWFyY2gtaW5wdXQnKTtcbiAgICAgICAgaWYgKHNlYXJjaElucHV0RWwpIHtcbiAgICAgICAgICAgIHNlYXJjaElucHV0RWwucmVtb3ZlQXR0cignYXJpYS1leHBhbmRlZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBldmVudERhdGEoJGV2ZW50LCBpdGVtKSB7XG4gICAgICAgIGlmICgkZXZlbnQpIHtcbiAgICAgICAgICAgICRldmVudFsnZGF0YSddID0ge1xuICAgICAgICAgICAgICAgIGl0ZW0gIDogaXRlbS5kYXRhT2JqZWN0LFxuICAgICAgICAgICAgICAgIG1vZGVsIDogaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgICBsYWJlbCA6IGl0ZW0ubGFiZWwsXG4gICAgICAgICAgICAgICAgcXVlcnkgOiB0aGlzLnF1ZXJ5XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICRldmVudDtcbiAgICB9XG5cbiAgICAvLyB0cmlnZ2VyZWQgb24gc2VsZWN0IG9uIG9wdGlvbiBmcm9tIHRoZSBsaXN0LiBTZXQgdGhlIHF1ZXJ5TW9kZWwsIHF1ZXJ5IGFuZCBtb2RlbEJ5S2V5IGZyb20gdGhlIG1hdGNoZWQgaXRlbS5cbiAgICBwdWJsaWMgdHlwZWFoZWFkT25TZWxlY3QobWF0Y2g6IFR5cGVhaGVhZE1hdGNoLCAkZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBtYXRjaC5pdGVtO1xuICAgICAgICB0aGlzLnF1ZXJ5TW9kZWwgPSBpdGVtO1xuICAgICAgICBpdGVtLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5xdWVyeSA9IGl0ZW0ubGFiZWw7XG4gICAgICAgIHRoaXMuc2hvd0Nsb3NlYnRuID0gKHRoaXMucXVlcnkgIT09ICcnKTtcbiAgICAgICAgJGV2ZW50ID0gJGV2ZW50IHx8IHRoaXMuJHR5cGVhaGVhZEV2ZW50O1xuXG4gICAgICAgIC8vIEFzIGl0ZW0ua2V5IGNhbiB2YXJ5IGZyb20ga2V5IGluIHRoZSBkYXRhc2V0SXRlbXNcbiAgICAgICAgdGhpcy5fbW9kZWxCeUtleSA9IGl0ZW0ua2V5O1xuICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSBpdGVtLnZhbHVlO1xuXG4gICAgICAgICRldmVudCA9IHRoaXMuZXZlbnREYXRhKCRldmVudCwgaXRlbSk7XG5cbiAgICAgICAgdGhpcy5pbnZva2VPblRvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwgJGV2ZW50IHx8IHt9KTtcbiAgICAgICAgLy8gdXBkYXRpbmcgdGhlIHZhcmlhYmxlIGJvdW5kIHRvIGRlZmF1bHQgdmFsdWUgYXMgaW52b2tlT25DaGFuZ2UgaXMgbm90IHVwZGF0aW5nIHRoZSB2YXJpYWJsZS5cbiAgICAgICAgaWYgKHRoaXMuZGF0YXZhbHVlICE9PSAodGhpcyBhcyBhbnkpLnByZXZEYXRhdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQm91bmRWYXJpYWJsZSh0aGlzLmRhdGF2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2Z1bGwtc2NyZWVuJykpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VTZWFyY2goKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3NlbGVjdCcsIHsgJGV2ZW50LCBzZWxlY3RlZFZhbHVlOiB0aGlzLmRhdGF2YWx1ZSB9KTtcbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzdWJtaXQnLCB7ICRldmVudCB9KTtcblxuICAgICAgICB0aGlzLnVwZGF0ZVByZXZEYXRhdmFsdWUodGhpcy5kYXRhdmFsdWUpO1xuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5OiBzdHJpbmcsIG52OiBhbnksIG92OiBhbnkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ3RhYmluZGV4Jykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmFja3dhcmQgY29tcGF0YWJpbGl0eSBmcm9tIDEwLjMuMSB0byAxMC4zLjJcbiAgICAgICAgLy8gMTAuMy4xIHdlIGhhZCBkaXNwbGF5bGFiZWwgYXMgbW9kYWwgdmFsdWVcbiAgICAgICAgLy8gRnJvbSAxMC4zLjIgb253b3JkcyB3ZSB3aWxsIGJlIGhhdmluZyBkaXNwbGF5ZXhwcmVzaW9uIGFzIG1vZGFsIHZhbHVlXG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdhdXRvY29tcGxldGUnICYmIGtleSA9PT0gJ2Rpc3BsYXlsYWJlbCcgJiYgdGhpcy5kaXNwbGF5bGFiZWwgJiYgKCF0aGlzLmRpc3BsYXlleHByZXNzaW9uIHx8ICh0aGlzLmRpc3BsYXlleHByZXNzaW9uICYmICF0aGlzLmRhdGFzb3VyY2UpKSkgIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWV4cHJlc3Npb24gPSB0aGlzLmRpc3BsYXlsYWJlbDtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWxhYmVsID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gd2hlbiBkYXRhb3B0aW9ucyBhcmUgcHJvdmlkZWQgYW5kIHRoZXJlIGlzIG5vIGRpc3BsYXlsYWJlbCBnaXZlbiB0aGVuIGRpc3BsYXlsYWJlbCBpcyBzZXQgYXMgdGhlIHJlbGF0ZWRmaWVsZFxuICAgICAgICBpZiAoa2V5ID09PSAnZGlzcGxheWxhYmVsJyAmJiB0aGlzLmRhdGFvcHRpb25zICYmIHRoaXMuYmluZGRpc3BsYXlsYWJlbCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5xdWVyeSA9IGdldCh0aGlzLl9tb2RlbEJ5VmFsdWUsIG52KSB8fCB0aGlzLl9tb2RlbEJ5VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3aGVuIHNlYXJjaCBpcyBkaXNhYmxlZCwgZG8gbm90IGxvYWQgYW55IG1vcmUgZGF0YSBvciBqdXN0IGNsZWFyIHRoZSBkYXRhIHRoYXQgaXMgYWxyZWFkeSBpbiBwcm9jZXNzIG9yIGxvYWRlZC5cbiAgICAgICAgaWYgKGtleSA9PT0gJ2Rpc2FibGVkJykge1xuICAgICAgICAgICAgaWYgKG52ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJEYXRhID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJEYXRhID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0KCh0aGlzLnR5cGVhaGVhZCBhcyBhbnkpLCAnX3R5cGVhaGVhZC5pc1Nob3duJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlYWhlYWQuaGlkZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHN1cGVyLm9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3YpO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjY3VzdG9tSXRlbVRlbXBsYXRlIGxldC1tb2RlbD1cIml0ZW1cIiBsZXQtaW5kZXg9XCJpbmRleFwiIGxldC1xdWVyeT1cInF1ZXJ5XCIgbGV0LW1hdGNoPVwibWF0Y2hcIj5cbiAgPCEtLSBEZWZhdWx0IGl0ZW0gdGVtcGxhdGUgLS0+XG4gIEBpZiAoIWNvbnRlbnQpIHtcbiAgICA8YT5cbiAgICAgIEBpZiAobW9kZWwuaW1nU3JjKSB7XG4gICAgICAgIDxpbWcgW3NyY109XCJtb2RlbC5pbWdTcmNcIiBhbHQ9XCJTZWFyY2hcIiBbc3R5bGUud2lkdGhdPVwiaW1hZ2V3aWR0aFwiPlxuICAgICAgfVxuICAgICAgPHNwYW4gW3RpdGxlXT1cIm1vZGVsLmxhYmVsXCIgW2lubmVySHRtbF09XCJoaWdobGlnaHQobWF0Y2gsIHF1ZXJ5KSB8fCBtb2RlbC5sYWJlbFwiPjwvc3Bhbj5cbiAgICA8L2E+XG4gIH1cbiAgPCEtLSBDdXN0b20gcGFydGlhbCB0ZW1wbGF0ZSAtLT5cbiAgQGlmIChjb250ZW50KSB7XG4gICAgPGEgW25nQ2xhc3NdPVwie2N1c3RvbVRlbXBsYXRlOiBjb250ZW50fVwiIHBhcnRpYWxDb250YWluZXIgW3dtSXRlbVRlbXBsYXRlXT1cImNvbnRlbnRcIiBbdXNlckNvbXBvbmVudFBhcmFtc109XCJtYXRjaC5pdGVtXCI+XG4gICAgICA8ZGl2IHBhcnRpYWwtY29udGFpbmVyLXRhcmdldD48L2Rpdj5cbiAgICA8L2E+XG4gIH1cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY3VzdG9tTGlzdFRlbXBsYXRlIGxldC1tYXRjaGVzPVwibWF0Y2hlc1wiIGxldC1pdGVtVGVtcGxhdGU9XCJpdGVtVGVtcGxhdGVcIiBsZXQtcXVlcnk9XCJxdWVyeVwiPlxuICA8dWwgI3VsRWxlbWVudCBjbGFzcz1cImFwcC1zZWFyY2ggZHJvcGRvd24tbWVudVwiIHNjcm9sbGFibGU+XG4gICAgQGZvciAobWF0Y2ggb2YgbWF0Y2hlczsgdHJhY2sgbWF0Y2g7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICA8bGkgI2xpRWxlbWVudHMgW25nQ2xhc3NdPVwie2FjdGl2ZTogdHlwZWFoZWFkQ29udGFpbmVyICYmIHR5cGVhaGVhZENvbnRhaW5lci5pc0FjdGl2ZShtYXRjaCksICdsaXN0LWdyb3VwLWhlYWRlcic6IG1hdGNoICYmIG1hdGNoLmlzSGVhZGVyKCl9XCJcbiAgICAgICAgKG1vdXNlZW50ZXIpPVwidHlwZWFoZWFkQ29udGFpbmVyLnNlbGVjdEFjdGl2ZShtYXRjaCk7XCJcbiAgICAgICAgKGNsaWNrKT1cIm1hdGNoICYmICFtYXRjaC5pc0hlYWRlcigpICYmIHR5cGVhaGVhZENvbnRhaW5lci5zZWxlY3RNYXRjaChtYXRjaCwgJGV2ZW50KTsgJHR5cGVhaGVhZEV2ZW50ID0gJGV2ZW50OyBub3RpZnlTdWJzY3JpYmVyKCk7XCI+XG4gICAgICAgIDwhLS0gaXRlbVRlbXBsYXRlIGNvbWVzIGZyb20gdGhlIDxpbnB1dD4gLS0+XG4gICAgICAgIEBpZiAobWF0Y2guaXNIZWFkZXIoKSkge1xuICAgICAgICAgIDxoNCBjbGFzcz1cImdyb3VwLXRpdGxlXCI+e3ttYXRjaC52YWx1ZX19PC9oND5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKCFtYXRjaC5pc0hlYWRlcigpKSB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJpdGVtVGVtcGxhdGVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntpdGVtOiBtYXRjaC5pdGVtLCBpbmRleDogaSwgbWF0Y2g6IG1hdGNoLCBxdWVyeTogcXVlcnl9XCI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cbiAgICAgIDwvbGk+XG4gICAgfVxuICAgIDxkaXYgY2xhc3M9XCJzdGF0dXNcIiBbaGlkZGVuXT1cIl9sb2FkaW5nSXRlbXMgfHwgIShkYXRhY29tcGxldGVtc2cgJiYgZGF0YVByb3ZpZGVyLmlzTGFzdFBhZ2UpXCI+XG4gICAgICA8c3BhbiBbdGV4dENvbnRlbnRdPVwiZGF0YWNvbXBsZXRlbXNnXCI+PC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJzdGF0dXNcIiBbaGlkZGVuXT1cIiFfbG9hZGluZ0l0ZW1zXCI+XG4gICAgICA8aSBjbGFzcz1cImZhIGZhLWNpcmNsZS1vLW5vdGNoIGZhLXNwaW5cIj48L2k+XG4gICAgICA8c3BhbiBbdGV4dENvbnRlbnRdPVwibG9hZGluZ2RhdGFtc2dcIj48L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvdWw+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tVGhpcyB0ZW1wbGF0ZSBpcyBmb3Igc2VhcmNoIGluc2lkZSBtb2JpbGUgbmF2YmFyLi0tPlxuQGlmIChuYXZzZWFyY2hiYXIpIHtcbiAgPGlucHV0IFt0aXRsZV09XCJxdWVyeSB8fCAnJ1wiIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJhcHAtdGV4dGJveCBmb3JtLWNvbnRyb2wgbGlzdC1vZi1vYmpzIGFwcC1zZWFyY2gtaW5wdXRcIiBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgfHwgJydcIlxuICAgIGZvY3VzLXRhcmdldFxuICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW2F0dHIuYWNjZXNza2V5XT1cInNob3J0Y3V0a2V5XCJcbiAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgIFsobmdNb2RlbCldPVwicXVlcnlcIlxuICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIlxuICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgW3R5cGVhaGVhZF09XCJ0eXBlYWhlYWREYXRhU291cmNlXCJcbiAgICBbdHlwZWFoZWFkV2FpdE1zXT1cImRlYm91bmNldGltZVwiXG4gICAgW3R5cGVhaGVhZEl0ZW1UZW1wbGF0ZV09XCJjdXN0b21JdGVtVGVtcGxhdGVcIlxuICAgIFtvcHRpb25zTGlzdFRlbXBsYXRlXT1cImN1c3RvbUxpc3RUZW1wbGF0ZVwiXG4gICAgKGlucHV0KT1cIm9uSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKGtleWRvd24pPVwibGlzdGVuUXVlcnkgPSB0cnVlXCJcbiAgICAoa2V5ZG93bi5lbnRlcik9XCIkdHlwZWFoZWFkRXZlbnQgPSAkZXZlbnQ7aGFuZGxlRW50ZXJFdmVudCgkZXZlbnQpXCJcbiAgICAoa2V5ZG93bi5hcnJvd2Rvd24pPVwic2VsZWN0TmV4dCgkZXZlbnQpXCJcbiAgICAoYmx1cik9XCJpbnZva2VPblRvdWNoZWQoJGV2ZW50KVwiXG4gICAgKGNsaWNrKT1cImhhbmRsZUZvY3VzKCRldmVudCk7XCJcbiAgICAoZm9jdXMpPVwiX3Vuc3Vic2NyaWJlRHYgPSBmYWxzZTsgbGlzdGVuUXVlcnkgPSB0cnVlOyBoYW5kbGVGb2N1cygkZXZlbnQpOyBpbnZva2VPbkZvY3VzKCRldmVudCk7XCJcbiAgICAoZm9jdXNvdXQpPVwib25Gb2N1c091dCgpXCJcbiAgICBbdHlwZWFoZWFkTWluTGVuZ3RoXT1cIm1pbmNoYXJzXCJcbiAgICBbdHlwZWFoZWFkT3B0aW9uc0xpbWl0XT1cImxpbWl0XCJcbiAgICAodHlwZWFoZWFkTG9hZGluZyk9XCJfbG9hZGluZ0l0ZW1zXCJcbiAgICAodHlwZWFoZWFkT25TZWxlY3QpPVwidHlwZWFoZWFkT25TZWxlY3QoJGV2ZW50KVwiXG4gICAgdHlwZWFoZWFkT3B0aW9uRmllbGQ9XCJsYWJlbFwiXG4gICAgW3R5cGVhaGVhZEdyb3VwRmllbGRdPVwiZ3JvdXBieSA/ICdncm91cGJ5JyA6IG51bGxcIlxuICAgIFt0eXBlYWhlYWRBc3luY109XCJ0cnVlXCJcbiAgICBbdHlwZWFoZWFkU2Nyb2xsYWJsZV09XCJ0cnVlXCJcbiAgICBbYWRhcHRpdmVQb3NpdGlvbl09XCJ0cnVlXCJcbiAgICBbdHlwZWFoZWFkT3B0aW9uc0luU2Nyb2xsYWJsZVZpZXddPVwib3B0aW9uc2xpbWl0aW5zY3JvbGxhYmxldmlld1wiXG4gICAgW2Ryb3B1cF09XCJkcm9wdXBcIlxuICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiXG4gICAgW2F0dHIubmFtZV09XCJuYW1lXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFsYWJlbCB8fCAnU2VhcmNoIGZpZWxkJ1wiLz5cbiAgPGkgY2xhc3M9XCJidG4tY2xvc2Ugd2kgd2ktY2FuY2VsXCIgW2hpZGRlbl09XCIhc2hvd0Nsb3NlYnRuXCIgKGNsaWNrKT1cImNsZWFyU2VhcmNoKCRldmVudCk7XCI+PC9pPlxufSBAZWxzZSB7XG4gIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1pY29uIGZvcm0tY29udHJvbC1mZWVkYmFjayBiYWNrLWJ0blwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIChjbGljayk9XCJjbG9zZVNlYXJjaCgpXCI+PGkgY2xhc3M9XCJhcHAtaWNvbiB7e2JhY2tzZWFyY2hpY29uY2xhc3N9fVwiPjwvaT48L2J1dHRvbj5cbiAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+QmFjayBidXR0b248L3NwYW4+XG4gIDxpbnB1dCBbdGl0bGVdPVwicXVlcnkgfHwgJydcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiYXBwLXRleHRib3ggZm9ybS1jb250cm9sIGxpc3Qtb2Ytb2JqcyBhcHAtc2VhcmNoLWlucHV0XCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyIHx8ICcnXCJcbiAgICBmb2N1cy10YXJnZXRcbiAgICBbY29udGFpbmVyXT1cImNvbnRhaW5lclRhcmdldCB8fCAnLndtLWFwcCdcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW2F0dHIuYWNjZXNza2V5XT1cInNob3J0Y3V0a2V5XCJcbiAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgIFsobmdNb2RlbCldPVwicXVlcnlcIlxuICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIlxuICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgW3R5cGVhaGVhZF09XCJ0eXBlYWhlYWREYXRhU291cmNlXCJcbiAgICBbdHlwZWFoZWFkV2FpdE1zXT1cImRlYm91bmNldGltZVwiXG4gICAgW3R5cGVhaGVhZEl0ZW1UZW1wbGF0ZV09XCJjdXN0b21JdGVtVGVtcGxhdGVcIlxuICAgIFtvcHRpb25zTGlzdFRlbXBsYXRlXT1cImN1c3RvbUxpc3RUZW1wbGF0ZVwiXG4gICAgKGlucHV0KT1cIm9uSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKGtleWRvd24pPVwibGlzdGVuUXVlcnkgPSB0cnVlXCJcbiAgICAoa2V5ZG93bi5lbnRlcik9XCIkdHlwZWFoZWFkRXZlbnQgPSAkZXZlbnQ7aGFuZGxlRW50ZXJFdmVudCgkZXZlbnQpXCJcbiAgICAoa2V5ZG93bi5hcnJvd2Rvd24pPVwic2VsZWN0TmV4dCgkZXZlbnQpXCJcbiAgICAoYmx1cik9XCJpbnZva2VPblRvdWNoZWQoJGV2ZW50KTsgb25Gb2N1c091dCgpXCJcbiAgICAoY2xpY2spPVwiaGFuZGxlRm9jdXMoJGV2ZW50KTtcIlxuICAgIChmb2N1cyk9XCJfdW5zdWJzY3JpYmVEdiA9IGZhbHNlOyBsaXN0ZW5RdWVyeSA9IHRydWU7IGhhbmRsZUZvY3VzKCRldmVudCk7IGludm9rZU9uRm9jdXMoJGV2ZW50KVwiXG4gICAgW3R5cGVhaGVhZE1pbkxlbmd0aF09XCJtaW5jaGFyc1wiXG4gICAgW3R5cGVhaGVhZE9wdGlvbnNMaW1pdF09XCJsaW1pdFwiXG4gICAgKHR5cGVhaGVhZExvYWRpbmcpPVwiX2xvYWRpbmdJdGVtc1wiXG4gICAgKHR5cGVhaGVhZE9uU2VsZWN0KT1cInR5cGVhaGVhZE9uU2VsZWN0KCRldmVudClcIlxuICAgIHR5cGVhaGVhZE9wdGlvbkZpZWxkPVwibGFiZWxcIlxuICAgIFt0eXBlYWhlYWRHcm91cEZpZWxkXT1cImdyb3VwYnkgPyAnZ3JvdXBieScgOiBudWxsXCJcbiAgICBbdHlwZWFoZWFkQXN5bmNdPVwidHJ1ZVwiXG4gICAgW3R5cGVhaGVhZFNjcm9sbGFibGVdPVwidHJ1ZVwiXG4gICAgW2FkYXB0aXZlUG9zaXRpb25dPVwidHJ1ZVwiXG4gICAgW3R5cGVhaGVhZE9wdGlvbnNJblNjcm9sbGFibGVWaWV3XT1cIm9wdGlvbnNsaW1pdGluc2Nyb2xsYWJsZXZpZXdcIlxuICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiXG4gICAgW2Ryb3B1cF09XCJkcm9wdXBcIlxuICAgIFthdHRyLm5hbWVdPVwibmFtZVwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhbGFiZWwgfHwgJ1NlYXJjaCBmaWVsZCdcIj5cbiAgPGlucHV0IGNsYXNzPVwibW9kZWwtaG9sZGVyXCIgbmctbW9kZWw9XCJwcm94eU1vZGVsXCIgbmctcmVxdWlyZWQ9XCJyZXF1aXJlZFwiIHRhYmluZGV4PVwiLTFcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgQGlmIChfbG9hZGluZ0l0ZW1zKSB7XG4gICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3M9XCJmYSBmYS1jaXJjbGUtby1ub3RjaCBmYS1zcGluIGZvcm0tY29udHJvbC1mZWVkYmFja1wiPjwvc3Bhbj5cbiAgfVxuICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4taWNvbiBmb3JtLWNvbnRyb2wtZmVlZGJhY2sgY2xlYXItYnRuXCIgW25nQ2xhc3NdPVwieydzaG93LWJ0bic6IGlzUXVlcnlFbnRlcmVkKCl9XCIgKGNsaWNrKT1cImNsZWFyU2VhcmNoKCRldmVudCwgdHJ1ZSlcIj48aSBjbGFzcz1cImFwcC1pY29uIHt7Y2xlYXJzZWFyY2hpY29uY2xhc3N9fVwiPjwvaT48L2J1dHRvbj5cbiAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+Q2xlYXIgYnV0dG9uPC9zcGFuPlxuICBAaWYgKHNob3dzZWFyY2hpY29uKSB7XG4gICAgPHNwYW4gW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6IGRpc2FibGVkfVwiIGNsYXNzPVwiaW5wdXQtZ3JvdXAtYWRkb25cIj5cbiAgICAgIDxmb3JtPlxuICAgICAgICA8YnV0dG9uIHRpdGxlPVwiU2VhcmNoXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgY2xhc3M9XCJhcHAtc2VhcmNoLWJ1dHRvbiBidG4gYnRuLWljb25cIiB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAoY2xpY2spPVwib25TZWFyY2hTZWxlY3QoJGV2ZW50KVwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiYXBwLWljb24ge3tzZWFyY2hpY29uY2xhc3N9fVwiPjwvaT48L2J1dHRvbj5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgPC9zcGFuPlxuICAgIH1cbiAgfVxuICA8IS0tVGhpcyB0ZW1wbGF0ZSBpcyBmb3IgYm90aCB3ZWIgYW5kIGZ1bGxzY3JlZW4gbW9kZSBpbiBtb2JpbGUuLS0+XG4iXX0=