@ng-nest/ui 12.0.6 → 12.0.11

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 (787) hide show
  1. package/auto-complete/auto-complete-portal.component.d.ts +3 -3
  2. package/auto-complete/auto-complete.component.d.ts +5 -1
  3. package/auto-complete/auto-complete.property.d.ts +6 -1
  4. package/back-top/back-top.component.d.ts +1 -2
  5. package/base-form/base-form.component.d.ts +1 -1
  6. package/base-form/base-form.property.d.ts +22 -2
  7. package/bundles/ng-nest-ui-affix.umd.js +25 -21
  8. package/bundles/ng-nest-ui-affix.umd.js.map +1 -1
  9. package/bundles/ng-nest-ui-alert.umd.js +25 -21
  10. package/bundles/ng-nest-ui-alert.umd.js.map +1 -1
  11. package/bundles/ng-nest-ui-anchor.umd.js +26 -22
  12. package/bundles/ng-nest-ui-anchor.umd.js.map +1 -1
  13. package/bundles/ng-nest-ui-api.umd.js +12 -14
  14. package/bundles/ng-nest-ui-api.umd.js.map +1 -1
  15. package/bundles/ng-nest-ui-auto-complete.umd.js +52 -29
  16. package/bundles/ng-nest-ui-auto-complete.umd.js.map +1 -1
  17. package/bundles/ng-nest-ui-avatar.umd.js +25 -21
  18. package/bundles/ng-nest-ui-avatar.umd.js.map +1 -1
  19. package/bundles/ng-nest-ui-back-top.umd.js +27 -23
  20. package/bundles/ng-nest-ui-back-top.umd.js.map +1 -1
  21. package/bundles/ng-nest-ui-badge.umd.js +27 -22
  22. package/bundles/ng-nest-ui-badge.umd.js.map +1 -1
  23. package/bundles/ng-nest-ui-base-form.umd.js +50 -22
  24. package/bundles/ng-nest-ui-base-form.umd.js.map +1 -1
  25. package/bundles/ng-nest-ui-border.umd.js +12 -14
  26. package/bundles/ng-nest-ui-border.umd.js.map +1 -1
  27. package/bundles/ng-nest-ui-button.umd.js +36 -29
  28. package/bundles/ng-nest-ui-button.umd.js.map +1 -1
  29. package/bundles/ng-nest-ui-calendar.umd.js +29 -24
  30. package/bundles/ng-nest-ui-calendar.umd.js.map +1 -1
  31. package/bundles/ng-nest-ui-card.umd.js +25 -21
  32. package/bundles/ng-nest-ui-card.umd.js.map +1 -1
  33. package/bundles/ng-nest-ui-carousel.umd.js +44 -39
  34. package/bundles/ng-nest-ui-carousel.umd.js.map +1 -1
  35. package/bundles/ng-nest-ui-cascade.umd.js +94 -36
  36. package/bundles/ng-nest-ui-cascade.umd.js.map +1 -1
  37. package/bundles/ng-nest-ui-checkbox.umd.js +28 -23
  38. package/bundles/ng-nest-ui-checkbox.umd.js.map +1 -1
  39. package/bundles/ng-nest-ui-collapse.umd.js +31 -27
  40. package/bundles/ng-nest-ui-collapse.umd.js.map +1 -1
  41. package/bundles/ng-nest-ui-color-picker.umd.js +79 -44
  42. package/bundles/ng-nest-ui-color-picker.umd.js.map +1 -1
  43. package/bundles/ng-nest-ui-color.umd.js +26 -22
  44. package/bundles/ng-nest-ui-color.umd.js.map +1 -1
  45. package/bundles/ng-nest-ui-comment.umd.js +34 -29
  46. package/bundles/ng-nest-ui-comment.umd.js.map +1 -1
  47. package/bundles/ng-nest-ui-container.umd.js +46 -42
  48. package/bundles/ng-nest-ui-container.umd.js.map +1 -1
  49. package/bundles/ng-nest-ui-core.umd.js +136 -35
  50. package/bundles/ng-nest-ui-core.umd.js.map +1 -1
  51. package/bundles/ng-nest-ui-crumb.umd.js +28 -23
  52. package/bundles/ng-nest-ui-crumb.umd.js.map +1 -1
  53. package/bundles/ng-nest-ui-date-picker.umd.js +387 -246
  54. package/bundles/ng-nest-ui-date-picker.umd.js.map +1 -1
  55. package/bundles/ng-nest-ui-description.umd.js +35 -32
  56. package/bundles/ng-nest-ui-description.umd.js.map +1 -1
  57. package/bundles/ng-nest-ui-dialog.umd.js +27 -22
  58. package/bundles/ng-nest-ui-dialog.umd.js.map +1 -1
  59. package/bundles/ng-nest-ui-doc.umd.js +12 -14
  60. package/bundles/ng-nest-ui-doc.umd.js.map +1 -1
  61. package/bundles/ng-nest-ui-drawer.umd.js +27 -22
  62. package/bundles/ng-nest-ui-drawer.umd.js.map +1 -1
  63. package/bundles/ng-nest-ui-dropdown.umd.js +32 -27
  64. package/bundles/ng-nest-ui-dropdown.umd.js.map +1 -1
  65. package/bundles/ng-nest-ui-empty.umd.js +25 -21
  66. package/bundles/ng-nest-ui-empty.umd.js.map +1 -1
  67. package/bundles/ng-nest-ui-examples.umd.js +12 -14
  68. package/bundles/ng-nest-ui-examples.umd.js.map +1 -1
  69. package/bundles/ng-nest-ui-find.umd.js +45 -27
  70. package/bundles/ng-nest-ui-find.umd.js.map +1 -1
  71. package/bundles/ng-nest-ui-form.umd.js +36 -36
  72. package/bundles/ng-nest-ui-form.umd.js.map +1 -1
  73. package/bundles/ng-nest-ui-highlight.umd.js +27 -22
  74. package/bundles/ng-nest-ui-highlight.umd.js.map +1 -1
  75. package/bundles/ng-nest-ui-i18n.umd.js +537 -138
  76. package/bundles/ng-nest-ui-i18n.umd.js.map +1 -1
  77. package/bundles/ng-nest-ui-icon.umd.js +34 -29
  78. package/bundles/ng-nest-ui-icon.umd.js.map +1 -1
  79. package/bundles/ng-nest-ui-inner.umd.js +26 -22
  80. package/bundles/ng-nest-ui-inner.umd.js.map +1 -1
  81. package/bundles/ng-nest-ui-input-number.umd.js +44 -24
  82. package/bundles/ng-nest-ui-input-number.umd.js.map +1 -1
  83. package/bundles/ng-nest-ui-input.umd.js +65 -32
  84. package/bundles/ng-nest-ui-input.umd.js.map +1 -1
  85. package/bundles/ng-nest-ui-layout.umd.js +31 -27
  86. package/bundles/ng-nest-ui-layout.umd.js.map +1 -1
  87. package/bundles/ng-nest-ui-link.umd.js +25 -21
  88. package/bundles/ng-nest-ui-link.umd.js.map +1 -1
  89. package/bundles/ng-nest-ui-list.umd.js +35 -30
  90. package/bundles/ng-nest-ui-list.umd.js.map +1 -1
  91. package/bundles/ng-nest-ui-loading.umd.js +27 -22
  92. package/bundles/ng-nest-ui-loading.umd.js.map +1 -1
  93. package/bundles/ng-nest-ui-menu.umd.js +37 -33
  94. package/bundles/ng-nest-ui-menu.umd.js.map +1 -1
  95. package/bundles/ng-nest-ui-message-box.umd.js +53 -47
  96. package/bundles/ng-nest-ui-message-box.umd.js.map +1 -1
  97. package/bundles/ng-nest-ui-message.umd.js +26 -22
  98. package/bundles/ng-nest-ui-message.umd.js.map +1 -1
  99. package/bundles/ng-nest-ui-notification.umd.js +26 -22
  100. package/bundles/ng-nest-ui-notification.umd.js.map +1 -1
  101. package/bundles/ng-nest-ui-outlet.umd.js +22 -18
  102. package/bundles/ng-nest-ui-outlet.umd.js.map +1 -1
  103. package/bundles/ng-nest-ui-page-header.umd.js +25 -21
  104. package/bundles/ng-nest-ui-page-header.umd.js.map +1 -1
  105. package/bundles/ng-nest-ui-pagination.umd.js +115 -26
  106. package/bundles/ng-nest-ui-pagination.umd.js.map +1 -1
  107. package/bundles/ng-nest-ui-pattern.umd.js +12 -14
  108. package/bundles/ng-nest-ui-pattern.umd.js.map +1 -1
  109. package/bundles/ng-nest-ui-popconfirm.umd.js +25 -21
  110. package/bundles/ng-nest-ui-popconfirm.umd.js.map +1 -1
  111. package/bundles/ng-nest-ui-popover.umd.js +31 -26
  112. package/bundles/ng-nest-ui-popover.umd.js.map +1 -1
  113. package/bundles/ng-nest-ui-portal.umd.js +22 -18
  114. package/bundles/ng-nest-ui-portal.umd.js.map +1 -1
  115. package/bundles/ng-nest-ui-progress.umd.js +28 -23
  116. package/bundles/ng-nest-ui-progress.umd.js.map +1 -1
  117. package/bundles/ng-nest-ui-radio.umd.js +28 -23
  118. package/bundles/ng-nest-ui-radio.umd.js.map +1 -1
  119. package/bundles/ng-nest-ui-rate.umd.js +30 -26
  120. package/bundles/ng-nest-ui-rate.umd.js.map +1 -1
  121. package/bundles/ng-nest-ui-result.umd.js +25 -21
  122. package/bundles/ng-nest-ui-result.umd.js.map +1 -1
  123. package/bundles/ng-nest-ui-ripple.umd.js +25 -21
  124. package/bundles/ng-nest-ui-ripple.umd.js.map +1 -1
  125. package/bundles/ng-nest-ui-select.umd.js +53 -34
  126. package/bundles/ng-nest-ui-select.umd.js.map +1 -1
  127. package/bundles/ng-nest-ui-skeleton.umd.js +27 -22
  128. package/bundles/ng-nest-ui-skeleton.umd.js.map +1 -1
  129. package/bundles/ng-nest-ui-slider-select.umd.js +25 -21
  130. package/bundles/ng-nest-ui-slider-select.umd.js.map +1 -1
  131. package/bundles/ng-nest-ui-slider.umd.js +32 -29
  132. package/bundles/ng-nest-ui-slider.umd.js.map +1 -1
  133. package/bundles/ng-nest-ui-statistic.umd.js +37 -31
  134. package/bundles/ng-nest-ui-statistic.umd.js.map +1 -1
  135. package/bundles/ng-nest-ui-steps.umd.js +35 -27
  136. package/bundles/ng-nest-ui-steps.umd.js.map +1 -1
  137. package/bundles/ng-nest-ui-switch.umd.js +25 -21
  138. package/bundles/ng-nest-ui-switch.umd.js.map +1 -1
  139. package/bundles/ng-nest-ui-table.umd.js +58 -51
  140. package/bundles/ng-nest-ui-table.umd.js.map +1 -1
  141. package/bundles/ng-nest-ui-tabs.umd.js +39 -34
  142. package/bundles/ng-nest-ui-tabs.umd.js.map +1 -1
  143. package/bundles/ng-nest-ui-tag.umd.js +36 -21
  144. package/bundles/ng-nest-ui-tag.umd.js.map +1 -1
  145. package/bundles/ng-nest-ui-text-retract.umd.js +27 -22
  146. package/bundles/ng-nest-ui-text-retract.umd.js.map +1 -1
  147. package/bundles/ng-nest-ui-textarea.umd.js +27 -32
  148. package/bundles/ng-nest-ui-textarea.umd.js.map +1 -1
  149. package/bundles/ng-nest-ui-theme.umd.js +26 -22
  150. package/bundles/ng-nest-ui-theme.umd.js.map +1 -1
  151. package/bundles/ng-nest-ui-time-ago.umd.js +12 -14
  152. package/bundles/ng-nest-ui-time-ago.umd.js.map +1 -1
  153. package/bundles/ng-nest-ui-time-picker.umd.js +87 -46
  154. package/bundles/ng-nest-ui-time-picker.umd.js.map +1 -1
  155. package/bundles/ng-nest-ui-time-range.umd.js +22 -18
  156. package/bundles/ng-nest-ui-time-range.umd.js.map +1 -1
  157. package/bundles/ng-nest-ui-timeline.umd.js +28 -23
  158. package/bundles/ng-nest-ui-timeline.umd.js.map +1 -1
  159. package/bundles/ng-nest-ui-tooltip.umd.js +31 -26
  160. package/bundles/ng-nest-ui-tooltip.umd.js.map +1 -1
  161. package/bundles/ng-nest-ui-transfer.umd.js +28 -23
  162. package/bundles/ng-nest-ui-transfer.umd.js.map +1 -1
  163. package/bundles/ng-nest-ui-tree-file.umd.js +25 -21
  164. package/bundles/ng-nest-ui-tree-file.umd.js.map +1 -1
  165. package/bundles/ng-nest-ui-tree.umd.js +39 -34
  166. package/bundles/ng-nest-ui-tree.umd.js.map +1 -1
  167. package/bundles/ng-nest-ui-typography.umd.js +25 -21
  168. package/bundles/ng-nest-ui-typography.umd.js.map +1 -1
  169. package/bundles/ng-nest-ui-upload.umd.js +32 -27
  170. package/bundles/ng-nest-ui-upload.umd.js.map +1 -1
  171. package/bundles/ng-nest-ui.umd.js +83 -243
  172. package/bundles/ng-nest-ui.umd.js.map +1 -1
  173. package/button/buttons.component.d.ts +1 -1
  174. package/calendar/calendar.component.d.ts +2 -2
  175. package/carousel/carousel-panel.component.d.ts +2 -3
  176. package/carousel/carousel.component.d.ts +1 -1
  177. package/cascade/cascade-portal.component.d.ts +13 -7
  178. package/cascade/cascade.component.d.ts +7 -1
  179. package/cascade/cascade.property.d.ts +33 -3
  180. package/checkbox/checkbox.component.d.ts +1 -1
  181. package/color/color.component.d.ts +2 -2
  182. package/color-picker/color-picker-portal.component.d.ts +3 -3
  183. package/color-picker/color-picker.component.d.ts +10 -4
  184. package/color-picker/color-picker.property.d.ts +12 -2
  185. package/comment/comment.component.d.ts +1 -1
  186. package/core/config/config.d.ts +25 -0
  187. package/core/functions/clone-deep.d.ts +1 -0
  188. package/core/functions/drop.d.ts +1 -0
  189. package/core/functions/flex.d.ts +1 -1
  190. package/core/functions/has-in.d.ts +1 -0
  191. package/core/functions/order-by.d.ts +1 -0
  192. package/core/functions/public-api.d.ts +5 -0
  193. package/core/functions/remove.d.ts +1 -0
  194. package/core/services/reuse-strategy.service.d.ts +1 -1
  195. package/crumb/crumb.component.d.ts +1 -1
  196. package/date-picker/date-picker-portal.component.d.ts +4 -11
  197. package/date-picker/date-picker.component.d.ts +3 -4
  198. package/date-picker/date-picker.property.d.ts +55 -30
  199. package/date-picker/date-range-portal.component.d.ts +10 -6
  200. package/date-picker/date-range.component.d.ts +15 -11
  201. package/date-picker/picker-date.component.d.ts +13 -4
  202. package/date-picker/picker-month.component.d.ts +6 -3
  203. package/date-picker/picker-year.component.d.ts +4 -2
  204. package/description/description.component.d.ts +2 -4
  205. package/dropdown/dropdown-portal.component.d.ts +1 -3
  206. package/dropdown/dropdown.component.d.ts +2 -2
  207. package/esm2015/affix/affix.component.js +3 -3
  208. package/esm2015/affix/affix.module.js +4 -4
  209. package/esm2015/affix/affix.property.js +3 -3
  210. package/esm2015/alert/alert.component.js +4 -4
  211. package/esm2015/alert/alert.module.js +4 -4
  212. package/esm2015/alert/alert.property.js +3 -3
  213. package/esm2015/anchor/anchor.component.js +5 -5
  214. package/esm2015/anchor/anchor.module.js +4 -4
  215. package/esm2015/anchor/anchor.property.js +4 -4
  216. package/esm2015/api/api.component.js +3 -3
  217. package/esm2015/api/api.module.js +4 -4
  218. package/esm2015/auto-complete/auto-complete-portal.component.js +6 -6
  219. package/esm2015/auto-complete/auto-complete.component.js +20 -7
  220. package/esm2015/auto-complete/auto-complete.module.js +4 -4
  221. package/esm2015/auto-complete/auto-complete.property.js +10 -4
  222. package/esm2015/avatar/avatar.component.js +3 -3
  223. package/esm2015/avatar/avatar.module.js +4 -4
  224. package/esm2015/avatar/avatar.property.js +3 -3
  225. package/esm2015/back-top/back-top.component.js +6 -6
  226. package/esm2015/back-top/back-top.module.js +4 -4
  227. package/esm2015/back-top/back-top.property.js +3 -3
  228. package/esm2015/badge/badge.component.js +6 -5
  229. package/esm2015/badge/badge.module.js +4 -4
  230. package/esm2015/badge/badge.property.js +3 -3
  231. package/esm2015/base-form/base-form.component.js +5 -5
  232. package/esm2015/base-form/base-form.module.js +4 -4
  233. package/esm2015/base-form/base-form.property.js +29 -5
  234. package/esm2015/border/border.component.js +3 -3
  235. package/esm2015/border/border.module.js +4 -4
  236. package/esm2015/button/button.component.js +10 -7
  237. package/esm2015/button/button.module.js +4 -4
  238. package/esm2015/button/button.property.js +6 -6
  239. package/esm2015/button/buttons.component.js +4 -4
  240. package/esm2015/calendar/calendar.component.js +8 -7
  241. package/esm2015/calendar/calendar.module.js +4 -4
  242. package/esm2015/calendar/calendar.property.js +3 -3
  243. package/esm2015/card/card.component.js +3 -3
  244. package/esm2015/card/card.module.js +4 -4
  245. package/esm2015/card/card.property.js +3 -3
  246. package/esm2015/carousel/carousel-panel.component.js +15 -14
  247. package/esm2015/carousel/carousel.component.js +7 -6
  248. package/esm2015/carousel/carousel.module.js +4 -4
  249. package/esm2015/carousel/carousel.property.js +6 -6
  250. package/esm2015/cascade/cascade-portal.component.js +23 -11
  251. package/esm2015/cascade/cascade.component.js +25 -9
  252. package/esm2015/cascade/cascade.module.js +4 -4
  253. package/esm2015/cascade/cascade.property.js +28 -5
  254. package/esm2015/checkbox/checkbox.component.js +7 -6
  255. package/esm2015/checkbox/checkbox.module.js +4 -4
  256. package/esm2015/checkbox/checkbox.property.js +4 -4
  257. package/esm2015/collapse/collapse-panel.component.js +4 -4
  258. package/esm2015/collapse/collapse.component.js +3 -3
  259. package/esm2015/collapse/collapse.module.js +4 -4
  260. package/esm2015/collapse/collapse.property.js +6 -6
  261. package/esm2015/color/color.component.js +5 -5
  262. package/esm2015/color/color.module.js +4 -4
  263. package/esm2015/color/color.property.js +3 -3
  264. package/esm2015/color-picker/color-picker-portal.component.js +5 -5
  265. package/esm2015/color-picker/color-picker.component.js +33 -14
  266. package/esm2015/color-picker/color-picker.module.js +4 -4
  267. package/esm2015/color-picker/color-picker.property.js +16 -5
  268. package/esm2015/comment/comment-reply.component.js +3 -3
  269. package/esm2015/comment/comment.component.js +7 -6
  270. package/esm2015/comment/comment.module.js +4 -4
  271. package/esm2015/comment/comment.property.js +6 -6
  272. package/esm2015/container/aside.component.js +3 -3
  273. package/esm2015/container/container.component.js +5 -5
  274. package/esm2015/container/container.module.js +4 -4
  275. package/esm2015/container/container.property.js +12 -12
  276. package/esm2015/container/footer.component.js +3 -3
  277. package/esm2015/container/header.component.js +3 -3
  278. package/esm2015/container/main.component.js +3 -3
  279. package/esm2015/core/animation/fade.js +1 -1
  280. package/esm2015/core/config/config.js +1 -1
  281. package/esm2015/core/config/config.service.js +3 -3
  282. package/esm2015/core/functions/clone-deep.js +12 -0
  283. package/esm2015/core/functions/drop.js +8 -0
  284. package/esm2015/core/functions/flex.js +18 -7
  285. package/esm2015/core/functions/has-in.js +4 -0
  286. package/esm2015/core/functions/order-by.js +31 -0
  287. package/esm2015/core/functions/public-api.js +6 -1
  288. package/esm2015/core/functions/remove.js +15 -0
  289. package/esm2015/core/services/http.service.js +5 -5
  290. package/esm2015/core/services/preloading-strategy.service.js +5 -5
  291. package/esm2015/core/services/reuse-strategy.service.js +2 -2
  292. package/esm2015/core/services/storage.service.js +3 -3
  293. package/esm2015/core/theme/theme.service.js +3 -3
  294. package/esm2015/crumb/crumb.component.js +7 -6
  295. package/esm2015/crumb/crumb.module.js +4 -4
  296. package/esm2015/crumb/crumb.property.js +3 -3
  297. package/esm2015/date-picker/date-picker-portal.component.js +11 -43
  298. package/esm2015/date-picker/date-picker.component.js +13 -14
  299. package/esm2015/date-picker/date-picker.module.js +4 -4
  300. package/esm2015/date-picker/date-picker.property.js +102 -38
  301. package/esm2015/date-picker/date-range-portal.component.js +41 -20
  302. package/esm2015/date-picker/date-range.component.js +66 -47
  303. package/esm2015/date-picker/picker-date.component.js +50 -15
  304. package/esm2015/date-picker/picker-month.component.js +25 -9
  305. package/esm2015/date-picker/picker-year.component.js +21 -9
  306. package/esm2015/description/description-item.component.js +4 -4
  307. package/esm2015/description/description.component.js +8 -9
  308. package/esm2015/description/description.module.js +4 -4
  309. package/esm2015/description/description.property.js +6 -6
  310. package/esm2015/dialog/dialog.component.js +6 -5
  311. package/esm2015/dialog/dialog.module.js +4 -4
  312. package/esm2015/dialog/dialog.property.js +4 -4
  313. package/esm2015/doc/doc.component.js +3 -3
  314. package/esm2015/doc/doc.module.js +4 -4
  315. package/esm2015/drawer/drawer.component.js +6 -5
  316. package/esm2015/drawer/drawer.module.js +4 -4
  317. package/esm2015/drawer/drawer.property.js +3 -3
  318. package/esm2015/dropdown/dropdown-portal.component.js +5 -5
  319. package/esm2015/dropdown/dropdown.component.js +7 -6
  320. package/esm2015/dropdown/dropdown.module.js +4 -4
  321. package/esm2015/dropdown/dropdown.property.js +3 -3
  322. package/esm2015/empty/empty.component.js +3 -3
  323. package/esm2015/empty/empty.module.js +4 -4
  324. package/esm2015/empty/empty.property.js +3 -3
  325. package/esm2015/examples/examples.component.js +3 -3
  326. package/esm2015/examples/examples.module.js +4 -4
  327. package/esm2015/find/find.component.js +13 -10
  328. package/esm2015/find/find.module.js +4 -4
  329. package/esm2015/find/find.property.js +16 -5
  330. package/esm2015/form/control.component.js +4 -4
  331. package/esm2015/form/form.component.js +9 -8
  332. package/esm2015/form/form.module.js +4 -4
  333. package/esm2015/form/form.property.js +8 -13
  334. package/esm2015/highlight/highlight.component.js +6 -5
  335. package/esm2015/highlight/highlight.module.js +4 -4
  336. package/esm2015/highlight/highlight.property.js +4 -4
  337. package/esm2015/i18n/i18n.directive.js +6 -5
  338. package/esm2015/i18n/i18n.module.js +4 -4
  339. package/esm2015/i18n/i18n.pipe.js +3 -3
  340. package/esm2015/i18n/i18n.service.js +3 -3
  341. package/esm2015/i18n/languages/ar_EG.js +11 -3
  342. package/esm2015/i18n/languages/bg_BG.js +11 -3
  343. package/esm2015/i18n/languages/ca_ES.js +11 -3
  344. package/esm2015/i18n/languages/cs_CZ.js +11 -3
  345. package/esm2015/i18n/languages/da_DK.js +11 -3
  346. package/esm2015/i18n/languages/de_DE.js +11 -3
  347. package/esm2015/i18n/languages/el_GR.js +11 -3
  348. package/esm2015/i18n/languages/en_GB.js +11 -3
  349. package/esm2015/i18n/languages/en_US.js +7 -2
  350. package/esm2015/i18n/languages/es_ES.js +11 -3
  351. package/esm2015/i18n/languages/et_EE.js +11 -3
  352. package/esm2015/i18n/languages/fa_IR.js +11 -3
  353. package/esm2015/i18n/languages/fi_FI.js +11 -3
  354. package/esm2015/i18n/languages/fr_BE.js +10 -2
  355. package/esm2015/i18n/languages/fr_FR.js +11 -3
  356. package/esm2015/i18n/languages/he_IL.js +11 -3
  357. package/esm2015/i18n/languages/hi_IN.js +11 -3
  358. package/esm2015/i18n/languages/hr_HR.js +11 -3
  359. package/esm2015/i18n/languages/hu_HU.js +11 -3
  360. package/esm2015/i18n/languages/hy_AM.js +11 -3
  361. package/esm2015/i18n/languages/id_ID.js +11 -3
  362. package/esm2015/i18n/languages/is_IS.js +11 -3
  363. package/esm2015/i18n/languages/it_IT.js +11 -3
  364. package/esm2015/i18n/languages/ja_JP.js +11 -3
  365. package/esm2015/i18n/languages/ka_GE.js +11 -3
  366. package/esm2015/i18n/languages/kn_IN.js +11 -3
  367. package/esm2015/i18n/languages/ko_KR.js +11 -3
  368. package/esm2015/i18n/languages/ku_IQ.js +11 -3
  369. package/esm2015/i18n/languages/lv_LV.js +11 -3
  370. package/esm2015/i18n/languages/mn_MN.js +11 -3
  371. package/esm2015/i18n/languages/ms_MY.js +11 -3
  372. package/esm2015/i18n/languages/nb_NO.js +11 -3
  373. package/esm2015/i18n/languages/ne_NP.js +11 -3
  374. package/esm2015/i18n/languages/nl_BE.js +11 -3
  375. package/esm2015/i18n/languages/nl_NL.js +11 -3
  376. package/esm2015/i18n/languages/pl_PL.js +11 -3
  377. package/esm2015/i18n/languages/pt_BR.js +11 -3
  378. package/esm2015/i18n/languages/pt_PT.js +11 -3
  379. package/esm2015/i18n/languages/ro_RO.js +11 -3
  380. package/esm2015/i18n/languages/ru_RU.js +11 -3
  381. package/esm2015/i18n/languages/sk_SK.js +11 -3
  382. package/esm2015/i18n/languages/sl_SI.js +11 -3
  383. package/esm2015/i18n/languages/sr_RS.js +11 -3
  384. package/esm2015/i18n/languages/sv_SE.js +11 -3
  385. package/esm2015/i18n/languages/ta_IN.js +11 -3
  386. package/esm2015/i18n/languages/th_TH.js +29 -21
  387. package/esm2015/i18n/languages/tr_TR.js +11 -3
  388. package/esm2015/i18n/languages/uk_UA.js +11 -3
  389. package/esm2015/i18n/languages/vi_VN.js +11 -3
  390. package/esm2015/i18n/languages/zh_CN.js +6 -2
  391. package/esm2015/i18n/languages/zh_TW.js +10 -3
  392. package/esm2015/icon/icon.component.js +7 -6
  393. package/esm2015/icon/icon.module.js +4 -4
  394. package/esm2015/icon/icon.property.js +3 -3
  395. package/esm2015/icon/icon.service.js +6 -6
  396. package/esm2015/inner/inner.component.js +5 -5
  397. package/esm2015/inner/inner.module.js +4 -4
  398. package/esm2015/inner/inner.property.js +3 -3
  399. package/esm2015/input/input-group.component.js +4 -6
  400. package/esm2015/input/input.component.js +20 -7
  401. package/esm2015/input/input.module.js +4 -4
  402. package/esm2015/input/input.property.js +14 -7
  403. package/esm2015/input-number/input-number.component.js +9 -5
  404. package/esm2015/input-number/input-number.module.js +7 -6
  405. package/esm2015/input-number/input-number.property.js +17 -5
  406. package/esm2015/layout/col.component.js +3 -3
  407. package/esm2015/layout/layout.module.js +4 -4
  408. package/esm2015/layout/layout.property.js +6 -6
  409. package/esm2015/layout/row.component.js +3 -3
  410. package/esm2015/link/link.component.js +3 -3
  411. package/esm2015/link/link.module.js +4 -4
  412. package/esm2015/link/link.property.js +3 -3
  413. package/esm2015/list/list-option.component.js +3 -3
  414. package/esm2015/list/list.component.js +8 -7
  415. package/esm2015/list/list.module.js +4 -4
  416. package/esm2015/list/list.property.js +7 -7
  417. package/esm2015/loading/loading.component.js +6 -5
  418. package/esm2015/loading/loading.module.js +4 -4
  419. package/esm2015/loading/loading.property.js +3 -3
  420. package/esm2015/menu/menu-node.component.js +4 -4
  421. package/esm2015/menu/menu.component.js +10 -10
  422. package/esm2015/menu/menu.module.js +4 -4
  423. package/esm2015/menu/menu.property.js +6 -6
  424. package/esm2015/message/message.component.js +5 -5
  425. package/esm2015/message/message.module.js +4 -4
  426. package/esm2015/message/message.service.js +3 -3
  427. package/esm2015/message-box/message-box.component.js +20 -24
  428. package/esm2015/message-box/message-box.module.js +4 -4
  429. package/esm2015/message-box/message-box.service.js +10 -8
  430. package/esm2015/notification/notification.component.js +5 -5
  431. package/esm2015/notification/notification.module.js +4 -4
  432. package/esm2015/notification/notification.property.js +1 -1
  433. package/esm2015/notification/notification.service.js +3 -3
  434. package/esm2015/outlet/outlet.directive.js +3 -3
  435. package/esm2015/outlet/outlet.module.js +4 -4
  436. package/esm2015/page-header/page-header.component.js +3 -3
  437. package/esm2015/page-header/page-header.module.js +4 -4
  438. package/esm2015/page-header/page-header.property.js +3 -3
  439. package/esm2015/pagination/pagination.component.js +45 -7
  440. package/esm2015/pagination/pagination.module.js +10 -6
  441. package/esm2015/pagination/pagination.property.js +52 -4
  442. package/esm2015/pattern/pattern.component.js +3 -3
  443. package/esm2015/pattern/pattern.module.js +4 -4
  444. package/esm2015/popconfirm/popconfirm.component.js +3 -3
  445. package/esm2015/popconfirm/popconfirm.module.js +4 -4
  446. package/esm2015/popconfirm/popconfirm.property.js +3 -3
  447. package/esm2015/popover/popover-portal.component.js +4 -4
  448. package/esm2015/popover/popover.directive.js +7 -6
  449. package/esm2015/popover/popover.module.js +4 -4
  450. package/esm2015/popover/popover.property.js +3 -3
  451. package/esm2015/portal/portal.module.js +4 -4
  452. package/esm2015/portal/portal.service.js +3 -3
  453. package/esm2015/progress/progress.component.js +7 -6
  454. package/esm2015/progress/progress.module.js +4 -4
  455. package/esm2015/progress/progress.property.js +3 -3
  456. package/esm2015/radio/radio.component.js +7 -6
  457. package/esm2015/radio/radio.module.js +4 -4
  458. package/esm2015/radio/radio.property.js +4 -4
  459. package/esm2015/rate/rate.component.js +9 -9
  460. package/esm2015/rate/rate.module.js +4 -4
  461. package/esm2015/rate/rate.property.js +3 -3
  462. package/esm2015/result/result.component.js +3 -3
  463. package/esm2015/result/result.module.js +4 -4
  464. package/esm2015/result/result.property.js +3 -3
  465. package/esm2015/ripple/ripple.directive.js +4 -4
  466. package/esm2015/ripple/ripple.module.js +4 -4
  467. package/esm2015/ripple/ripple.property.js +4 -4
  468. package/esm2015/select/select-portal.component.js +6 -6
  469. package/esm2015/select/select.component.js +15 -11
  470. package/esm2015/select/select.module.js +4 -4
  471. package/esm2015/select/select.property.js +15 -4
  472. package/esm2015/skeleton/skeleton.component.js +6 -5
  473. package/esm2015/skeleton/skeleton.module.js +4 -4
  474. package/esm2015/skeleton/skeleton.property.js +3 -3
  475. package/esm2015/slider/slider.component.js +11 -12
  476. package/esm2015/slider/slider.module.js +4 -4
  477. package/esm2015/slider/slider.property.js +3 -3
  478. package/esm2015/slider-select/slider-select.component.js +3 -3
  479. package/esm2015/slider-select/slider-select.module.js +4 -4
  480. package/esm2015/slider-select/slider-select.property.js +3 -3
  481. package/esm2015/statistic/countdown.component.js +8 -7
  482. package/esm2015/statistic/statistic.component.js +6 -5
  483. package/esm2015/statistic/statistic.module.js +4 -4
  484. package/esm2015/statistic/statistic.property.js +6 -6
  485. package/esm2015/steps/steps.component.js +9 -7
  486. package/esm2015/steps/steps.module.js +7 -6
  487. package/esm2015/steps/steps.property.js +6 -4
  488. package/esm2015/switch/switch.component.js +3 -3
  489. package/esm2015/switch/switch.module.js +4 -4
  490. package/esm2015/switch/switch.property.js +3 -3
  491. package/esm2015/table/drag.directive.js +5 -5
  492. package/esm2015/table/table-body.component.js +7 -6
  493. package/esm2015/table/table-foot.component.js +4 -4
  494. package/esm2015/table/table-head.component.js +7 -6
  495. package/esm2015/table/table.component.js +9 -8
  496. package/esm2015/table/table.module.js +4 -4
  497. package/esm2015/table/table.property.js +13 -13
  498. package/esm2015/tabs/tab-content.component.js +3 -3
  499. package/esm2015/tabs/tab.component.js +4 -4
  500. package/esm2015/tabs/tabs.component.js +9 -8
  501. package/esm2015/tabs/tabs.module.js +4 -4
  502. package/esm2015/tabs/tabs.property.js +6 -6
  503. package/esm2015/tag/tag.component.js +10 -5
  504. package/esm2015/tag/tag.module.js +4 -4
  505. package/esm2015/tag/tag.property.js +10 -4
  506. package/esm2015/text-retract/text-retract.component.js +6 -5
  507. package/esm2015/text-retract/text-retract.module.js +4 -4
  508. package/esm2015/text-retract/text-retract.property.js +3 -3
  509. package/esm2015/textarea/textarea.component.js +6 -5
  510. package/esm2015/textarea/textarea.module.js +4 -4
  511. package/esm2015/textarea/textarea.property.js +4 -14
  512. package/esm2015/theme/theme.component.js +5 -5
  513. package/esm2015/theme/theme.module.js +4 -4
  514. package/esm2015/theme/theme.property.js +4 -4
  515. package/esm2015/time-ago/time-ago.module.js +4 -4
  516. package/esm2015/time-ago/time-ago.pipe.js +3 -3
  517. package/esm2015/time-picker/time-picker-frame.component.js +22 -12
  518. package/esm2015/time-picker/time-picker-portal.component.js +5 -5
  519. package/esm2015/time-picker/time-picker.component.js +31 -15
  520. package/esm2015/time-picker/time-picker.module.js +4 -4
  521. package/esm2015/time-picker/time-picker.property.js +16 -5
  522. package/esm2015/time-range/time-range.module.js +4 -4
  523. package/esm2015/time-range/time-range.pipe.js +3 -3
  524. package/esm2015/timeline/timeline.component.js +7 -6
  525. package/esm2015/timeline/timeline.module.js +4 -4
  526. package/esm2015/timeline/timeline.property.js +3 -3
  527. package/esm2015/tooltip/tooltip-portal.component.js +4 -4
  528. package/esm2015/tooltip/tooltip.directive.js +7 -6
  529. package/esm2015/tooltip/tooltip.module.js +4 -4
  530. package/esm2015/tooltip/tooltip.property.js +4 -4
  531. package/esm2015/transfer/transfer.component.js +7 -6
  532. package/esm2015/transfer/transfer.module.js +4 -4
  533. package/esm2015/transfer/transfer.property.js +3 -3
  534. package/esm2015/tree/tree-node.component.js +5 -5
  535. package/esm2015/tree/tree.component.js +11 -10
  536. package/esm2015/tree/tree.module.js +4 -4
  537. package/esm2015/tree/tree.property.js +7 -7
  538. package/esm2015/tree-file/tree-file.component.js +3 -3
  539. package/esm2015/tree-file/tree-file.module.js +4 -4
  540. package/esm2015/tree-file/tree-file.property.js +3 -3
  541. package/esm2015/typography/typography.component.js +3 -3
  542. package/esm2015/typography/typography.module.js +4 -4
  543. package/esm2015/typography/typography.property.js +3 -3
  544. package/esm2015/upload/upload-portal.component.js +5 -5
  545. package/esm2015/upload/upload.component.js +7 -6
  546. package/esm2015/upload/upload.module.js +4 -4
  547. package/esm2015/upload/upload.property.js +3 -3
  548. package/fesm2015/ng-nest-ui-affix.js +10 -10
  549. package/fesm2015/ng-nest-ui-alert.js +10 -10
  550. package/fesm2015/ng-nest-ui-alert.js.map +1 -1
  551. package/fesm2015/ng-nest-ui-anchor.js +11 -11
  552. package/fesm2015/ng-nest-ui-anchor.js.map +1 -1
  553. package/fesm2015/ng-nest-ui-api.js +7 -7
  554. package/fesm2015/ng-nest-ui-auto-complete.js +37 -18
  555. package/fesm2015/ng-nest-ui-auto-complete.js.map +1 -1
  556. package/fesm2015/ng-nest-ui-avatar.js +10 -10
  557. package/fesm2015/ng-nest-ui-back-top.js +12 -12
  558. package/fesm2015/ng-nest-ui-back-top.js.map +1 -1
  559. package/fesm2015/ng-nest-ui-badge.js +12 -11
  560. package/fesm2015/ng-nest-ui-badge.js.map +1 -1
  561. package/fesm2015/ng-nest-ui-base-form.js +36 -12
  562. package/fesm2015/ng-nest-ui-base-form.js.map +1 -1
  563. package/fesm2015/ng-nest-ui-border.js +7 -7
  564. package/fesm2015/ng-nest-ui-button.js +22 -19
  565. package/fesm2015/ng-nest-ui-button.js.map +1 -1
  566. package/fesm2015/ng-nest-ui-calendar.js +14 -13
  567. package/fesm2015/ng-nest-ui-calendar.js.map +1 -1
  568. package/fesm2015/ng-nest-ui-card.js +10 -10
  569. package/fesm2015/ng-nest-ui-carousel.js +28 -27
  570. package/fesm2015/ng-nest-ui-carousel.js.map +1 -1
  571. package/fesm2015/ng-nest-ui-cascade.js +80 -28
  572. package/fesm2015/ng-nest-ui-cascade.js.map +1 -1
  573. package/fesm2015/ng-nest-ui-checkbox.js +13 -12
  574. package/fesm2015/ng-nest-ui-checkbox.js.map +1 -1
  575. package/fesm2015/ng-nest-ui-collapse.js +16 -16
  576. package/fesm2015/ng-nest-ui-collapse.js.map +1 -1
  577. package/fesm2015/ng-nest-ui-color-picker.js +55 -24
  578. package/fesm2015/ng-nest-ui-color-picker.js.map +1 -1
  579. package/fesm2015/ng-nest-ui-color.js +11 -11
  580. package/fesm2015/ng-nest-ui-color.js.map +1 -1
  581. package/fesm2015/ng-nest-ui-comment.js +19 -18
  582. package/fesm2015/ng-nest-ui-comment.js.map +1 -1
  583. package/fesm2015/ng-nest-ui-container.js +32 -32
  584. package/fesm2015/ng-nest-ui-container.js.map +1 -1
  585. package/fesm2015/ng-nest-ui-core.js +106 -25
  586. package/fesm2015/ng-nest-ui-core.js.map +1 -1
  587. package/fesm2015/ng-nest-ui-crumb.js +13 -12
  588. package/fesm2015/ng-nest-ui-crumb.js.map +1 -1
  589. package/fesm2015/ng-nest-ui-date-picker.js +325 -190
  590. package/fesm2015/ng-nest-ui-date-picker.js.map +1 -1
  591. package/fesm2015/ng-nest-ui-description.js +21 -22
  592. package/fesm2015/ng-nest-ui-description.js.map +1 -1
  593. package/fesm2015/ng-nest-ui-dialog.js +12 -11
  594. package/fesm2015/ng-nest-ui-dialog.js.map +1 -1
  595. package/fesm2015/ng-nest-ui-doc.js +7 -7
  596. package/fesm2015/ng-nest-ui-drawer.js +12 -11
  597. package/fesm2015/ng-nest-ui-drawer.js.map +1 -1
  598. package/fesm2015/ng-nest-ui-dropdown.js +17 -16
  599. package/fesm2015/ng-nest-ui-dropdown.js.map +1 -1
  600. package/fesm2015/ng-nest-ui-empty.js +10 -10
  601. package/fesm2015/ng-nest-ui-examples.js +7 -7
  602. package/fesm2015/ng-nest-ui-find.js +31 -17
  603. package/fesm2015/ng-nest-ui-find.js.map +1 -1
  604. package/fesm2015/ng-nest-ui-form.js +22 -26
  605. package/fesm2015/ng-nest-ui-form.js.map +1 -1
  606. package/fesm2015/ng-nest-ui-highlight.js +12 -11
  607. package/fesm2015/ng-nest-ui-highlight.js.map +1 -1
  608. package/fesm2015/ng-nest-ui-i18n.js +532 -131
  609. package/fesm2015/ng-nest-ui-i18n.js.map +1 -1
  610. package/fesm2015/ng-nest-ui-icon.js +18 -18
  611. package/fesm2015/ng-nest-ui-icon.js.map +1 -1
  612. package/fesm2015/ng-nest-ui-inner.js +11 -11
  613. package/fesm2015/ng-nest-ui-inner.js.map +1 -1
  614. package/fesm2015/ng-nest-ui-input-number.js +31 -14
  615. package/fesm2015/ng-nest-ui-input-number.js.map +1 -1
  616. package/fesm2015/ng-nest-ui-input.js +39 -21
  617. package/fesm2015/ng-nest-ui-input.js.map +1 -1
  618. package/fesm2015/ng-nest-ui-layout.js +16 -16
  619. package/fesm2015/ng-nest-ui-link.js +10 -10
  620. package/fesm2015/ng-nest-ui-list.js +20 -19
  621. package/fesm2015/ng-nest-ui-list.js.map +1 -1
  622. package/fesm2015/ng-nest-ui-loading.js +12 -11
  623. package/fesm2015/ng-nest-ui-loading.js.map +1 -1
  624. package/fesm2015/ng-nest-ui-menu.js +22 -22
  625. package/fesm2015/ng-nest-ui-menu.js.map +1 -1
  626. package/fesm2015/ng-nest-ui-message-box.js +32 -34
  627. package/fesm2015/ng-nest-ui-message-box.js.map +1 -1
  628. package/fesm2015/ng-nest-ui-message.js +11 -11
  629. package/fesm2015/ng-nest-ui-message.js.map +1 -1
  630. package/fesm2015/ng-nest-ui-notification.js +11 -11
  631. package/fesm2015/ng-nest-ui-notification.js.map +1 -1
  632. package/fesm2015/ng-nest-ui-outlet.js +7 -7
  633. package/fesm2015/ng-nest-ui-page-header.js +10 -10
  634. package/fesm2015/ng-nest-ui-pagination.js +104 -14
  635. package/fesm2015/ng-nest-ui-pagination.js.map +1 -1
  636. package/fesm2015/ng-nest-ui-pattern.js +7 -7
  637. package/fesm2015/ng-nest-ui-popconfirm.js +10 -10
  638. package/fesm2015/ng-nest-ui-popover.js +16 -15
  639. package/fesm2015/ng-nest-ui-popover.js.map +1 -1
  640. package/fesm2015/ng-nest-ui-portal.js +7 -7
  641. package/fesm2015/ng-nest-ui-progress.js +13 -12
  642. package/fesm2015/ng-nest-ui-progress.js.map +1 -1
  643. package/fesm2015/ng-nest-ui-radio.js +13 -12
  644. package/fesm2015/ng-nest-ui-radio.js.map +1 -1
  645. package/fesm2015/ng-nest-ui-rate.js +15 -15
  646. package/fesm2015/ng-nest-ui-rate.js.map +1 -1
  647. package/fesm2015/ng-nest-ui-result.js +10 -10
  648. package/fesm2015/ng-nest-ui-ripple.js +10 -10
  649. package/fesm2015/ng-nest-ui-ripple.js.map +1 -1
  650. package/fesm2015/ng-nest-ui-select.js +37 -22
  651. package/fesm2015/ng-nest-ui-select.js.map +1 -1
  652. package/fesm2015/ng-nest-ui-skeleton.js +12 -11
  653. package/fesm2015/ng-nest-ui-skeleton.js.map +1 -1
  654. package/fesm2015/ng-nest-ui-slider-select.js +10 -10
  655. package/fesm2015/ng-nest-ui-slider.js +17 -18
  656. package/fesm2015/ng-nest-ui-slider.js.map +1 -1
  657. package/fesm2015/ng-nest-ui-statistic.js +22 -20
  658. package/fesm2015/ng-nest-ui-statistic.js.map +1 -1
  659. package/fesm2015/ng-nest-ui-steps.js +19 -14
  660. package/fesm2015/ng-nest-ui-steps.js.map +1 -1
  661. package/fesm2015/ng-nest-ui-switch.js +10 -10
  662. package/fesm2015/ng-nest-ui-table.js +43 -40
  663. package/fesm2015/ng-nest-ui-table.js.map +1 -1
  664. package/fesm2015/ng-nest-ui-tabs.js +24 -23
  665. package/fesm2015/ng-nest-ui-tabs.js.map +1 -1
  666. package/fesm2015/ng-nest-ui-tag.js +22 -11
  667. package/fesm2015/ng-nest-ui-tag.js.map +1 -1
  668. package/fesm2015/ng-nest-ui-text-retract.js +12 -11
  669. package/fesm2015/ng-nest-ui-text-retract.js.map +1 -1
  670. package/fesm2015/ng-nest-ui-textarea.js +12 -21
  671. package/fesm2015/ng-nest-ui-textarea.js.map +1 -1
  672. package/fesm2015/ng-nest-ui-theme.js +11 -11
  673. package/fesm2015/ng-nest-ui-theme.js.map +1 -1
  674. package/fesm2015/ng-nest-ui-time-ago.js +7 -7
  675. package/fesm2015/ng-nest-ui-time-picker.js +73 -36
  676. package/fesm2015/ng-nest-ui-time-picker.js.map +1 -1
  677. package/fesm2015/ng-nest-ui-time-range.js +7 -7
  678. package/fesm2015/ng-nest-ui-timeline.js +13 -12
  679. package/fesm2015/ng-nest-ui-timeline.js.map +1 -1
  680. package/fesm2015/ng-nest-ui-tooltip.js +16 -15
  681. package/fesm2015/ng-nest-ui-tooltip.js.map +1 -1
  682. package/fesm2015/ng-nest-ui-transfer.js +13 -12
  683. package/fesm2015/ng-nest-ui-transfer.js.map +1 -1
  684. package/fesm2015/ng-nest-ui-tree-file.js +10 -10
  685. package/fesm2015/ng-nest-ui-tree.js +24 -23
  686. package/fesm2015/ng-nest-ui-tree.js.map +1 -1
  687. package/fesm2015/ng-nest-ui-typography.js +10 -10
  688. package/fesm2015/ng-nest-ui-upload.js +17 -16
  689. package/fesm2015/ng-nest-ui-upload.js.map +1 -1
  690. package/find/find.component.d.ts +1 -1
  691. package/find/find.property.d.ts +22 -2
  692. package/form/control.component.d.ts +1 -1
  693. package/form/form.component.d.ts +1 -1
  694. package/form/form.property.d.ts +6 -6
  695. package/i18n/languages/ar_EG.d.ts +8 -0
  696. package/i18n/languages/bg_BG.d.ts +8 -0
  697. package/i18n/languages/ca_ES.d.ts +8 -0
  698. package/i18n/languages/cs_CZ.d.ts +8 -0
  699. package/i18n/languages/da_DK.d.ts +8 -0
  700. package/i18n/languages/de_DE.d.ts +8 -0
  701. package/i18n/languages/el_GR.d.ts +8 -0
  702. package/i18n/languages/en_GB.d.ts +8 -0
  703. package/i18n/languages/en_US.d.ts +5 -0
  704. package/i18n/languages/es_ES.d.ts +8 -0
  705. package/i18n/languages/et_EE.d.ts +8 -0
  706. package/i18n/languages/fa_IR.d.ts +8 -0
  707. package/i18n/languages/fi_FI.d.ts +8 -0
  708. package/i18n/languages/fr_BE.d.ts +8 -0
  709. package/i18n/languages/fr_FR.d.ts +8 -0
  710. package/i18n/languages/he_IL.d.ts +8 -0
  711. package/i18n/languages/hi_IN.d.ts +8 -0
  712. package/i18n/languages/hr_HR.d.ts +8 -0
  713. package/i18n/languages/hu_HU.d.ts +8 -0
  714. package/i18n/languages/hy_AM.d.ts +8 -0
  715. package/i18n/languages/id_ID.d.ts +8 -0
  716. package/i18n/languages/is_IS.d.ts +8 -0
  717. package/i18n/languages/it_IT.d.ts +8 -0
  718. package/i18n/languages/ja_JP.d.ts +8 -0
  719. package/i18n/languages/ka_GE.d.ts +8 -0
  720. package/i18n/languages/kn_IN.d.ts +8 -0
  721. package/i18n/languages/ko_KR.d.ts +8 -0
  722. package/i18n/languages/ku_IQ.d.ts +8 -0
  723. package/i18n/languages/lv_LV.d.ts +8 -0
  724. package/i18n/languages/mn_MN.d.ts +8 -0
  725. package/i18n/languages/ms_MY.d.ts +8 -0
  726. package/i18n/languages/nb_NO.d.ts +8 -0
  727. package/i18n/languages/ne_NP.d.ts +8 -0
  728. package/i18n/languages/nl_BE.d.ts +8 -0
  729. package/i18n/languages/nl_NL.d.ts +8 -0
  730. package/i18n/languages/pl_PL.d.ts +8 -0
  731. package/i18n/languages/pt_BR.d.ts +8 -0
  732. package/i18n/languages/pt_PT.d.ts +8 -0
  733. package/i18n/languages/ro_RO.d.ts +8 -0
  734. package/i18n/languages/ru_RU.d.ts +8 -0
  735. package/i18n/languages/sk_SK.d.ts +8 -0
  736. package/i18n/languages/sl_SI.d.ts +8 -0
  737. package/i18n/languages/sr_RS.d.ts +8 -0
  738. package/i18n/languages/sv_SE.d.ts +8 -0
  739. package/i18n/languages/ta_IN.d.ts +8 -0
  740. package/i18n/languages/th_TH.d.ts +8 -0
  741. package/i18n/languages/tr_TR.d.ts +8 -0
  742. package/i18n/languages/uk_UA.d.ts +8 -0
  743. package/i18n/languages/vi_VN.d.ts +8 -0
  744. package/i18n/languages/zh_CN.d.ts +4 -0
  745. package/i18n/languages/zh_TW.d.ts +7 -0
  746. package/inner/inner.component.d.ts +1 -1
  747. package/input/input-group.component.d.ts +2 -4
  748. package/input/input.component.d.ts +3 -1
  749. package/input/input.property.d.ts +13 -1
  750. package/input-number/input-number.component.d.ts +3 -0
  751. package/input-number/input-number.module.d.ts +4 -3
  752. package/input-number/input-number.property.d.ts +12 -2
  753. package/list/list.component.d.ts +2 -2
  754. package/menu/menu.component.d.ts +1 -1
  755. package/message/message.component.d.ts +1 -1
  756. package/message-box/message-box.component.d.ts +2 -1
  757. package/notification/notification.component.d.ts +1 -1
  758. package/package.json +1 -1
  759. package/pagination/pagination.component.d.ts +5 -1
  760. package/pagination/pagination.module.d.ts +7 -3
  761. package/pagination/pagination.property.d.ts +49 -3
  762. package/radio/radio.component.d.ts +1 -1
  763. package/rate/rate.component.d.ts +5 -5
  764. package/select/select-portal.component.d.ts +3 -3
  765. package/select/select.component.d.ts +1 -1
  766. package/select/select.property.d.ts +12 -2
  767. package/slider/slider.component.d.ts +1 -1
  768. package/steps/steps.component.d.ts +1 -1
  769. package/steps/steps.module.d.ts +2 -1
  770. package/steps/steps.property.d.ts +7 -2
  771. package/table/table-body.component.d.ts +1 -1
  772. package/table/table-head.component.d.ts +1 -1
  773. package/table/table.component.d.ts +1 -1
  774. package/table/table.property.d.ts +10 -0
  775. package/tag/tag.component.d.ts +2 -1
  776. package/tag/tag.property.d.ts +6 -1
  777. package/textarea/textarea.property.d.ts +1 -6
  778. package/theme/theme.component.d.ts +1 -1
  779. package/time-picker/time-picker-frame.component.d.ts +4 -0
  780. package/time-picker/time-picker-portal.component.d.ts +3 -3
  781. package/time-picker/time-picker.component.d.ts +5 -3
  782. package/time-picker/time-picker.property.d.ts +12 -2
  783. package/timeline/timeline.component.d.ts +1 -1
  784. package/transfer/transfer.component.d.ts +1 -1
  785. package/tree/tree-node.component.d.ts +1 -1
  786. package/tree/tree.component.d.ts +1 -1
  787. package/upload/upload.component.d.ts +3 -3
@@ -2,7 +2,7 @@ import { XPortalConnectedPosition } from '@ng-nest/ui/portal';
2
2
  import { Subject } from 'rxjs';
3
3
  import { Component, ViewEncapsulation, ChangeDetectionStrategy, ViewChild } from '@angular/core';
4
4
  import { XDateRangePrefix, XDateRangeProperty } from './date-picker.property';
5
- import { XIsEmpty, XIsDate, XIsNumber, XIsChange, XClearClass, XIsString } from '@ng-nest/ui/core';
5
+ import { XIsEmpty, XIsDate, XIsNumber, XIsChange, XClearClass, XIsString, XIsUndefined } from '@ng-nest/ui/core';
6
6
  import { DatePipe } from '@angular/common';
7
7
  import { takeUntil } from 'rxjs/operators';
8
8
  import { XValueAccessor } from '@ng-nest/ui/base-form';
@@ -14,12 +14,12 @@ import * as i3 from "@angular/common";
14
14
  import * as i4 from "@angular/cdk/overlay";
15
15
  import * as i5 from "@ng-nest/ui/input";
16
16
  import * as i6 from "@ng-nest/ui/icon";
17
+ import * as i7 from "@angular/forms";
17
18
  export class XDateRangeComponent extends XDateRangeProperty {
18
- constructor(renderer, configService, elementRef, cdr, portalService, viewContainerRef, datePipe, overlay) {
19
+ constructor(renderer, configService, cdr, portalService, viewContainerRef, datePipe, overlay) {
19
20
  super();
20
21
  this.renderer = renderer;
21
22
  this.configService = configService;
22
- this.elementRef = elementRef;
23
23
  this.cdr = cdr;
24
24
  this.portalService = portalService;
25
25
  this.viewContainerRef = viewContainerRef;
@@ -27,11 +27,10 @@ export class XDateRangeComponent extends XDateRangeProperty {
27
27
  this.overlay = overlay;
28
28
  this.modelType = 'date';
29
29
  this.isInput = false;
30
- this.isFocus = false;
31
30
  this.enter = false;
32
31
  this.inputClearable = false;
33
32
  this.animating = false;
34
- this.displayValue = '';
33
+ this.displayValue = [];
35
34
  this.icon = 'fto-calendar';
36
35
  this.maxNodes = 6;
37
36
  this.protalTobottom = true;
@@ -39,27 +38,32 @@ export class XDateRangeComponent extends XDateRangeProperty {
39
38
  this.dataChange = new Subject();
40
39
  this.positionChange = new Subject();
41
40
  this.closeSubject = new Subject();
41
+ this.startDisplay = '';
42
+ this.endDisplay = '';
43
+ this.startActive = false;
44
+ this.endActive = false;
42
45
  this._unSubject = new Subject();
43
46
  }
44
47
  get getRequired() {
45
48
  return this.required && XIsEmpty(this.value);
46
49
  }
47
50
  writeValue(value) {
48
- if (XIsDate(value)) {
49
- this.modelType = 'date';
50
- this.numberValue = value.getTime();
51
- }
52
- else if (XIsNumber(value)) {
53
- this.modelType = 'number';
54
- this.numberValue = value;
55
- }
56
- else if (XIsString(value)) {
57
- this.modelType = 'string';
58
- const valueTime = new Date(value).getTime();
59
- this.numberValue = !isNaN(valueTime) ? valueTime : '';
60
- }
61
- else if (XIsEmpty(value)) {
62
- this.numberValue = '';
51
+ if (XIsUndefined(value))
52
+ value = [];
53
+ if (value.length > 0) {
54
+ if (XIsDate(value[0])) {
55
+ this.modelType = 'date';
56
+ this.numberValue = value.getTime();
57
+ }
58
+ else if (XIsNumber(value[0])) {
59
+ this.modelType = 'number';
60
+ this.numberValue = value;
61
+ }
62
+ else if (XIsString(value[0])) {
63
+ this.modelType = 'string';
64
+ const valueTime = value.map((x) => new Date(x).getTime());
65
+ this.numberValue = !isNaN(valueTime[0]) ? valueTime : [];
66
+ }
63
67
  }
64
68
  this.value = value;
65
69
  this.setDisplayValue(this.numberValue);
@@ -76,7 +80,8 @@ export class XDateRangeComponent extends XDateRangeProperty {
76
80
  this.setPortal();
77
81
  }
78
82
  ngOnChanges(changes) {
79
- if (XIsChange(changes.type)) {
83
+ const { type } = changes;
84
+ if (XIsChange(type)) {
80
85
  this.setFormat();
81
86
  this.setDisplayValue(this.numberValue);
82
87
  }
@@ -86,7 +91,7 @@ export class XDateRangeComponent extends XDateRangeProperty {
86
91
  this._unSubject.unsubscribe();
87
92
  }
88
93
  setSubject() {
89
- this.closeSubject.pipe(takeUntil(this._unSubject)).subscribe((x) => {
94
+ this.closeSubject.pipe(takeUntil(this._unSubject)).subscribe(() => {
90
95
  this.closePortal();
91
96
  });
92
97
  }
@@ -133,9 +138,9 @@ export class XDateRangeComponent extends XDateRangeProperty {
133
138
  }
134
139
  }
135
140
  clearEmit() {
136
- this.value = '';
137
- this.numberValue = '';
138
- this.displayValue = '';
141
+ this.value = [];
142
+ this.numberValue = [];
143
+ this.displayValue = [];
139
144
  this.mleave();
140
145
  this.valueChange.next(this.numberValue);
141
146
  this.modelChange();
@@ -147,9 +152,9 @@ export class XDateRangeComponent extends XDateRangeProperty {
147
152
  }
148
153
  getValue() {
149
154
  return this.modelType === 'date'
150
- ? new Date(this.numberValue)
155
+ ? this.numberValue.map((x) => new Date(x))
151
156
  : this.modelType === 'string'
152
- ? this.datePipe.transform(this.numberValue, this.format)
157
+ ? this.numberValue.map((x) => this.datePipe.transform(x, this.format))
153
158
  : this.numberValue;
154
159
  }
155
160
  portalAttached() {
@@ -160,6 +165,7 @@ export class XDateRangeComponent extends XDateRangeProperty {
160
165
  var _a, _b;
161
166
  if (this.portalAttached()) {
162
167
  (_b = (_a = this.portal) === null || _a === void 0 ? void 0 : _a.overlayRef) === null || _b === void 0 ? void 0 : _b.detach();
168
+ this.active = false;
163
169
  this.cdr.detectChanges();
164
170
  return true;
165
171
  }
@@ -169,10 +175,14 @@ export class XDateRangeComponent extends XDateRangeProperty {
169
175
  var _a, _b;
170
176
  (_b = (_a = this.portal) === null || _a === void 0 ? void 0 : _a.overlayRef) === null || _b === void 0 ? void 0 : _b.dispose();
171
177
  }
172
- showPortal() {
178
+ showPortal($event, type) {
173
179
  var _a;
180
+ $event.stopPropagation();
174
181
  if (this.disabled || this.animating)
175
182
  return;
183
+ this.active = true;
184
+ this.startActive = type === 'start';
185
+ this.endActive = type === 'end';
176
186
  const config = {
177
187
  backdropClass: '',
178
188
  positionStrategy: this.setPlacement(),
@@ -211,15 +221,25 @@ export class XDateRangeComponent extends XDateRangeProperty {
211
221
  positionChange: this.positionChange,
212
222
  closePortal: () => this.closeSubject.next(),
213
223
  destroyPortal: () => this.destroyPortal(),
214
- nodeEmit: (node, sure = true) => this.onNodeClick(node, sure),
224
+ nodeEmit: (dates, sure = true) => this.onNodeClick(dates, sure),
225
+ startNodeEmit: (node) => this.startNodeClick(node),
226
+ endNodeEmit: (node) => this.endNodeClick(node),
215
227
  animating: (ing) => (this.animating = ing)
216
228
  });
217
229
  componentRef.changeDetectorRef.detectChanges();
218
230
  }
219
- onNodeClick(date, sure = true) {
231
+ startNodeClick(node) {
232
+ this.startDisplay = this.datePipe.transform(node, this.format);
233
+ this.cdr.detectChanges();
234
+ }
235
+ endNodeClick(node) {
236
+ this.endDisplay = this.datePipe.transform(node, this.format);
237
+ this.cdr.detectChanges();
238
+ }
239
+ onNodeClick(dates, sure = true) {
220
240
  this.isInput = false;
221
241
  if (sure) {
222
- this.numberValue = date.getTime();
242
+ this.numberValue = dates.map((x) => x.getTime());
223
243
  this.value = this.getValue();
224
244
  this.setDisplayValue(this.numberValue);
225
245
  this.closeSubject.next();
@@ -227,7 +247,7 @@ export class XDateRangeComponent extends XDateRangeProperty {
227
247
  this.nodeEmit.emit(this.numberValue);
228
248
  }
229
249
  else {
230
- this.setDisplayValue(date.getTime());
250
+ this.setDisplayValue(dates.map((x) => x.getTime()));
231
251
  this.cdr.markForCheck();
232
252
  }
233
253
  }
@@ -235,16 +255,15 @@ export class XDateRangeComponent extends XDateRangeProperty {
235
255
  this.isInput = true;
236
256
  }
237
257
  setDisplayValue(dateNumber) {
238
- if (this.isInput && isNaN(this.displayValue) && !isNaN(Date.parse(this.displayValue))) {
239
- this.displayValue = this.datePipe.transform(this.displayValue, this.format);
240
- this.numberValue = new Date(this.displayValue).getTime();
241
- this.value = this.getValue();
242
- this.modelChange();
243
- this.isInput = false;
244
- }
245
- else {
246
- this.displayValue = this.datePipe.transform(dateNumber, this.format);
247
- }
258
+ // if (this.isInput && isNaN(this.startDisplay) && !isNaN(Date.parse(this.displayValue))) {
259
+ // this.displayValue = this.datePipe.transform(this.displayValue, this.format);
260
+ // this.numberValue = new Date(this.displayValue).getTime();
261
+ // this.value = this.getValue();
262
+ // this.modelChange();
263
+ // this.isInput = false;
264
+ // } else {
265
+ this.displayValue = dateNumber.map((x) => this.datePipe.transform(x, this.format));
266
+ // }
248
267
  }
249
268
  setPlacement() {
250
269
  return this.portalService.setPlacement({
@@ -266,9 +285,9 @@ export class XDateRangeComponent extends XDateRangeProperty {
266
285
  this.cdr.detectChanges();
267
286
  }
268
287
  }
269
- /** @nocollapse */ XDateRangeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.3", ngImport: i0, type: XDateRangeComponent, deps: [{ token: i0.Renderer2 }, { token: i1.XConfigService }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i2.XPortalService }, { token: i0.ViewContainerRef }, { token: i3.DatePipe }, { token: i4.Overlay }], target: i0.ɵɵFactoryTarget.Component });
270
- /** @nocollapse */ XDateRangeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.3", type: XDateRangeComponent, selector: "x-date-range", providers: [XValueAccessor(XDateRangeComponent), DatePipe], viewQueries: [{ propertyName: "dateRange", first: true, predicate: ["dateRange"], descendants: true, static: true }, { propertyName: "inputGroup", first: true, predicate: ["inputGroup"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div #dateRange class=\"x-date-range\" [class.x-date-range-focus]=\"isFocus\">\r\n <div class=\"x-date-range-row\">\r\n <x-input-group #inputGroup class=\"x-date-range-group\" bordered=\"false\" (click)=\"showPortal()\">\r\n <x-input #inputStartCom type=\"text\" placeholder=\"\u5F00\u59CB\u65E5\u671F\" (xFocus)=\"isFocus = true\" (xBlur)=\"isFocus = false\"></x-input>\r\n <x-icon type=\"fto-arrow-right\"></x-icon>\r\n <x-input #inputEndCom type=\"text\" placeholder=\"\u7ED3\u675F\u65E5\u671F\" (xFocus)=\"isFocus = true\" (xBlur)=\"isFocus = false\"></x-input>\r\n <x-icon [type]=\"icon\"></x-icon>\r\n </x-input-group>\r\n </div>\r\n</div>\r\n", styles: ["x-date-range{display:inline-block}.x-date-range{margin:0;padding:0;width:100%}.x-date-range-row{flex:1;display:flex;align-items:center}.x-date-range-group{display:inline-flex;flex:1;width:100%;font-size:var(--x-font-size);background-color:var(--x-background);background-image:none;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-radius:var(--x-border-radius);box-shadow:var(--x-box-shadow) #0000;transition:all var(--x-animation-duration-slow)}.x-date-range-group .x-input-group{display:flex;align-items:center}.x-date-range-group .x-input-group>x-icon{color:var(--x-text-400);transition:all var(--x-animation-duration-base);z-index:2;padding:.4rem}.x-date-range-group .x-input-group>x-input input{height:inherit!important;line-height:inherit!important}.x-date-range-group:hover{border-color:var(--x-primary-300)}.x-date-range-focus .x-date-range-group{border-color:var(--x-primary)}"], components: [{ type: i5.XInputGroupComponent, selector: "x-input-group" }, { type: i5.XInputComponent, selector: "x-input" }, { type: i6.XIconComponent, selector: "x-icon" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
271
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.3", ngImport: i0, type: XDateRangeComponent, decorators: [{
288
+ /** @nocollapse */ XDateRangeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: XDateRangeComponent, deps: [{ token: i0.Renderer2 }, { token: i1.XConfigService }, { token: i0.ChangeDetectorRef }, { token: i2.XPortalService }, { token: i0.ViewContainerRef }, { token: i3.DatePipe }, { token: i4.Overlay }], target: i0.ɵɵFactoryTarget.Component });
289
+ /** @nocollapse */ XDateRangeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.5", type: XDateRangeComponent, selector: "x-date-range", providers: [XValueAccessor(XDateRangeComponent), DatePipe], viewQueries: [{ propertyName: "dateRange", first: true, predicate: ["dateRange"], descendants: true, static: true }, { propertyName: "inputGroup", first: true, predicate: ["inputGroup"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div #dateRange class=\"x-date-range\" [class.x-date-range-active]=\"active\">\r\n <div class=\"x-date-range-row\">\r\n <x-input-group #inputGroup class=\"x-date-range-group\" bordered=\"false\" (click)=\"showPortal($event)\">\r\n <x-input\r\n #inputStartCom\r\n type=\"text\"\r\n placeholder=\"\u5F00\u59CB\u65E5\u671F\"\r\n [(active)]=\"startActive\"\r\n (click)=\"showPortal($event, 'start')\"\r\n [(ngModel)]=\"startDisplay\"\r\n ></x-input>\r\n <x-icon type=\"fto-arrow-right\"></x-icon>\r\n <x-input\r\n #inputEndCom\r\n type=\"text\"\r\n placeholder=\"\u7ED3\u675F\u65E5\u671F\"\r\n [(active)]=\"endActive\"\r\n (click)=\"showPortal($event, 'end')\"\r\n [(ngModel)]=\"endDisplay\"\r\n ></x-input>\r\n <x-icon [type]=\"icon\"></x-icon>\r\n </x-input-group>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";x-date-range{display:inline-block}.x-date-range{margin:0;padding:0;width:100%}.x-date-range-row{flex:1;display:flex;align-items:center}.x-date-range-group{display:inline-flex;flex:1;width:100%;font-size:var(--x-font-size);background-color:var(--x-background);background-image:none;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-radius:var(--x-border-radius);box-shadow:var(--x-box-shadow) transparent;transition:all var(--x-animation-duration-slow)}.x-date-range-group .x-input-group{display:flex;align-items:center}.x-date-range-group .x-input-group>x-icon{color:var(--x-text-400);transition:all var(--x-animation-duration-base);z-index:2;padding:.4rem}.x-date-range-group .x-input-group>x-input{width:6rem}.x-date-range-group .x-input-group>x-input input{padding-left:0!important;padding-right:0!important;margin-left:.4rem;margin-right:.4rem}.x-date-range-group .x-input-group>x-input.x-input-active input{background-color:gray}.x-date-range-group:hover{border-color:var(--x-primary-300)}.x-date-range-active .x-date-range-group{border-color:var(--x-primary)}\n"], components: [{ type: i5.XInputGroupComponent, selector: "x-input-group" }, { type: i5.XInputComponent, selector: "x-input" }, { type: i6.XIconComponent, selector: "x-icon" }], directives: [{ type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
290
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: XDateRangeComponent, decorators: [{
272
291
  type: Component,
273
292
  args: [{
274
293
  selector: `${XDateRangePrefix}`,
@@ -278,11 +297,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.3", ngImpor
278
297
  changeDetection: ChangeDetectionStrategy.OnPush,
279
298
  providers: [XValueAccessor(XDateRangeComponent), DatePipe]
280
299
  }]
281
- }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i1.XConfigService }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i2.XPortalService }, { type: i0.ViewContainerRef }, { type: i3.DatePipe }, { type: i4.Overlay }]; }, propDecorators: { dateRange: [{
300
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i1.XConfigService }, { type: i0.ChangeDetectorRef }, { type: i2.XPortalService }, { type: i0.ViewContainerRef }, { type: i3.DatePipe }, { type: i4.Overlay }]; }, propDecorators: { dateRange: [{
282
301
  type: ViewChild,
283
302
  args: ['dateRange', { static: true }]
284
303
  }], inputGroup: [{
285
304
  type: ViewChild,
286
305
  args: ['inputGroup', { static: true }]
287
306
  }] } });
288
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvbmctbmVzdC91aS9kYXRlLXBpY2tlci9kYXRlLXJhbmdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYi9uZy1uZXN0L3VpL2RhdGUtcGlja2VyL2RhdGUtcmFuZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFxQyx3QkFBd0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUNMLFNBQVMsRUFFVCxpQkFBaUIsRUFDakIsdUJBQXVCLEVBTXZCLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWdFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUksT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBVyxXQUFXLEVBQUUsU0FBUyxFQUFrQixNQUFNLGtCQUFrQixDQUFDO0FBRTVILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7Ozs7OztBQVUxRSxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsa0JBQWtCO0lBaUR6RCxZQUNTLFFBQW1CLEVBQ25CLGFBQTZCLEVBQzVCLFVBQXNCLEVBQ3RCLEdBQXNCLEVBQ3RCLGFBQTZCLEVBQzdCLGdCQUFrQyxFQUNsQyxRQUFrQixFQUNsQixPQUFnQjtRQUV4QixLQUFLLEVBQUUsQ0FBQztRQVRELGFBQVEs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Q0FBQyxJQUFJO29CQUNyQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsU0FBUyxFQUFFLENBQUMsY0FBYyxxQkFBcUIsRUFBRSxRQUFRLENBQUM7aUJBQzNEOytSQUUyQyxTQUFTO3NCQUFsRCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0csVUFBVTtzQkFBcEQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgWERhdGVQaWNrZXJQb3J0YWxDb21wb25lbnQgfSBmcm9tICcuL2RhdGUtcGlja2VyLXBvcnRhbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBYUG9ydGFsU2VydmljZSwgWFBvcnRhbE92ZXJsYXlSZWYsIFhQb3J0YWxDb25uZWN0ZWRQb3NpdGlvbiB9IGZyb20gJ0BuZy1uZXN0L3VpL3BvcnRhbCc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIFJlbmRlcmVyMixcclxuICBFbGVtZW50UmVmLFxyXG4gIE9uQ2hhbmdlcyxcclxuICBWaWV3Q29udGFpbmVyUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxuICBTaW1wbGVDaGFuZ2VzXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFhEYXRlUGlja2VyUHJlZml4LCBYRGF0ZVBpY2tlclByb3BlcnR5LCBYRGF0ZVBpY2tlck1vZGVsVHlwZSwgWERhdGVSYW5nZVByZWZpeCwgWERhdGVSYW5nZVByb3BlcnR5IH0gZnJvbSAnLi9kYXRlLXBpY2tlci5wcm9wZXJ0eSc7XHJcbmltcG9ydCB7IFhJc0VtcHR5LCBYSXNEYXRlLCBYSXNOdW1iZXIsIFhJc0NoYW5nZSwgWENvcm5lciwgWENsZWFyQ2xhc3MsIFhJc1N0cmluZywgWENvbmZpZ1NlcnZpY2UgfSBmcm9tICdAbmctbmVzdC91aS9jb3JlJztcclxuaW1wb3J0IHsgWElucHV0Q29tcG9uZW50LCBYSW5wdXRHcm91cENvbXBvbmVudCB9IGZyb20gJ0BuZy1uZXN0L3VpL2lucHV0JztcclxuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBPdmVybGF5LCBPdmVybGF5Q29uZmlnLCBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3ksIENvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbkNoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBYVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0BuZy1uZXN0L3VpL2Jhc2UtZm9ybSc7XHJcbmltcG9ydCB7IFhEYXRlUmFuZ2VQb3J0YWxDb21wb25lbnQgfSBmcm9tICcuL2RhdGUtcmFuZ2UtcG9ydGFsLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogYCR7WERhdGVSYW5nZVByZWZpeH1gLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXJhbmdlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kYXRlLXJhbmdlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBwcm92aWRlcnM6IFtYVmFsdWVBY2Nlc3NvcihYRGF0ZVJhbmdlQ29tcG9uZW50KSwgRGF0ZVBpcGVdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBYRGF0ZVJhbmdlQ29tcG9uZW50IGV4dGVuZHMgWERhdGVSYW5nZVByb3BlcnR5IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gIEBWaWV3Q2hpbGQoJ2RhdGVSYW5nZScsIHsgc3RhdGljOiB0cnVlIH0pIGRhdGVSYW5nZSE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnaW5wdXRHcm91cCcsIHsgc3RhdGljOiB0cnVlIH0pIGlucHV0R3JvdXAhOiBYSW5wdXRHcm91cENvbXBvbmVudDtcclxuXHJcbiAgbW9kZWxUeXBlOiBYRGF0ZVBpY2tlck1vZGVsVHlwZSA9ICdkYXRlJztcclxuICBudW1iZXJWYWx1ZSE6IG51bWJlciB8IHN0cmluZztcclxuICBpc0lucHV0ID0gZmFsc2U7XHJcbiAgaXNGb2N1cyA9IGZhbHNlO1xyXG5cclxuICBnZXQgZ2V0UmVxdWlyZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXF1aXJlZCAmJiBYSXNFbXB0eSh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKFhJc0RhdGUodmFsdWUpKSB7XHJcbiAgICAgIHRoaXMubW9kZWxUeXBlID0gJ2RhdGUnO1xyXG4gICAgICB0aGlzLm51bWJlclZhbHVlID0gdmFsdWUuZ2V0VGltZSgpO1xyXG4gICAgfSBlbHNlIGlmIChYSXNOdW1iZXIodmFsdWUpKSB7XHJcbiAgICAgIHRoaXMubW9kZWxUeXBlID0gJ251bWJlcic7XHJcbiAgICAgIHRoaXMubnVtYmVyVmFsdWUgPSB2YWx1ZTtcclxuICAgIH0gZWxzZSBpZiAoWElzU3RyaW5nKHZhbHVlKSkge1xyXG4gICAgICB0aGlzLm1vZGVsVHlwZSA9ICdzdHJpbmcnO1xyXG4gICAgICBjb25zdCB2YWx1ZVRpbWUgPSBuZXcgRGF0ZSh2YWx1ZSkuZ2V0VGltZSgpO1xyXG4gICAgICB0aGlzLm51bWJlclZhbHVlID0gIWlzTmFOKHZhbHVlVGltZSkgPyB2YWx1ZVRpbWUgOiAnJztcclxuICAgIH0gZWxzZSBpZiAoWElzRW1wdHkodmFsdWUpKSB7XHJcbiAgICAgIHRoaXMubnVtYmVyVmFsdWUgPSAnJztcclxuICAgIH1cclxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuc2V0RGlzcGxheVZhbHVlKHRoaXMubnVtYmVyVmFsdWUpO1xyXG4gICAgdGhpcy52YWx1ZUNoYW5nZS5uZXh0KHRoaXMubnVtYmVyVmFsdWUpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgZW50ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpbnB1dENsZWFyYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGFuaW1hdGluZyA9IGZhbHNlO1xyXG4gIGRpc3BsYXlWYWx1ZTogYW55ID0gJyc7XHJcbiAgcG9ydGFsITogWFBvcnRhbE92ZXJsYXlSZWY8WERhdGVSYW5nZVBvcnRhbENvbXBvbmVudD47XHJcbiAgaWNvbjogc3RyaW5nID0gJ2Z0by1jYWxlbmRhcic7XHJcbiAgYm94ITogRE9NUmVjdDtcclxuICBwcm90YWxIZWlnaHQhOiBudW1iZXI7XHJcbiAgbWF4Tm9kZXM6IG51bWJlciA9IDY7XHJcbiAgcHJvdGFsVG9ib3R0b206IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHZhbHVlQ2hhbmdlOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIGRhdGFDaGFuZ2U6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgcG9zaXRpb25DaGFuZ2U6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgY2xvc2VTdWJqZWN0OiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIHByaXZhdGUgX3VuU3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBwdWJsaWMgY29uZmlnU2VydmljZTogWENvbmZpZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHBvcnRhbFNlcnZpY2U6IFhQb3J0YWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGUsXHJcbiAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXlcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc2V0RmxleCh0aGlzLmRhdGVSYW5nZS5uYXRpdmVFbGVtZW50LCB0aGlzLnJlbmRlcmVyLCB0aGlzLmp1c3RpZnksIHRoaXMuYWxpZ24sIHRoaXMuZGlyZWN0aW9uKTtcclxuICAgIHRoaXMuc2V0Rm9ybWF0KCk7XHJcbiAgICB0aGlzLnNldENsYXNzTWFwKCk7XHJcbiAgICB0aGlzLnNldFN1YmplY3QoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuc2V0UG9ydGFsKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoWElzQ2hhbmdlKGNoYW5nZXMudHlwZSkpIHtcclxuICAgICAgdGhpcy5zZXRGb3JtYXQoKTtcclxuICAgICAgdGhpcy5zZXREaXNwbGF5VmFsdWUodGhpcy5udW1iZXJWYWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3VuU3ViamVjdC5uZXh0KCk7XHJcbiAgICB0aGlzLl91blN1YmplY3QudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHNldFN1YmplY3QoKSB7XHJcbiAgICB0aGlzLmNsb3NlU3ViamVjdC5waXBlKHRha2VVbnRpbCh0aGlzLl91blN1YmplY3QpKS5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgdGhpcy5jbG9zZVBvcnRhbCgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRGb3JtYXQoKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtYXQgIT09ICd5eXl5LU1NLWRkJykgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgIHRoaXMuZm9ybWF0ID0gJ3l5eXktTU0tZGQnO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICd5ZWFyJykge1xyXG4gICAgICB0aGlzLmZvcm1hdCA9ICd5eXl5JztcclxuICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSAnbW9udGgnKSB7XHJcbiAgICAgIHRoaXMuZm9ybWF0ID0gJ3l5eXktTU0nO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdkYXRlLXRpbWUnKSB7XHJcbiAgICAgIHRoaXMuZm9ybWF0ID0gJ3l5eXktTU0tZGQgSEg6bW06c3MnO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdkYXRlLWhvdXInKSB7XHJcbiAgICAgIHRoaXMuZm9ybWF0ID0gJ3l5eXktTU0tZGQgSEgnO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdkYXRlLW1pbnV0ZScpIHtcclxuICAgICAgdGhpcy5mb3JtYXQgPSAneXl5eS1NTS1kZCBISDptbSc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtZW50ZXIoKSB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgdGhpcy5lbnRlciA9IHRydWU7XHJcbiAgICBpZiAoIVhJc0VtcHR5KHRoaXMubnVtYmVyVmFsdWUpKSB7XHJcbiAgICAgIHRoaXMuaWNvbiA9ICcnO1xyXG4gICAgICB0aGlzLmlucHV0Q2xlYXJhYmxlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbWxlYXZlKCkge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcclxuICAgIHRoaXMuZW50ZXIgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLmlucHV0Q2xlYXJhYmxlKSB7XHJcbiAgICAgIHRoaXMuaWNvbiA9ICdmdG8tY2FsZW5kYXInO1xyXG4gICAgICB0aGlzLmlucHV0Q2xlYXJhYmxlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsZWFyRW1pdCgpIHtcclxuICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgIHRoaXMubnVtYmVyVmFsdWUgPSAnJztcclxuICAgIHRoaXMuZGlzcGxheVZhbHVlID0gJyc7XHJcbiAgICB0aGlzLm1sZWF2ZSgpO1xyXG4gICAgdGhpcy52YWx1ZUNoYW5nZS5uZXh0KHRoaXMubnVtYmVyVmFsdWUpO1xyXG4gICAgdGhpcy5tb2RlbENoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgbW9kZWxDaGFuZ2UoKSB7XHJcbiAgICBpZiAodGhpcy5vbkNoYW5nZSkge1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuZ2V0VmFsdWUoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRWYWx1ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGVsVHlwZSA9PT0gJ2RhdGUnXHJcbiAgICAgID8gbmV3IERhdGUodGhpcy5udW1iZXJWYWx1ZSlcclxuICAgICAgOiB0aGlzLm1vZGVsVHlwZSA9PT0gJ3N0cmluZydcclxuICAgICAgPyB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLm51bWJlclZhbHVlLCB0aGlzLmZvcm1hdClcclxuICAgICAgOiB0aGlzLm51bWJlclZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcG9ydGFsQXR0YWNoZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wb3J0YWw/Lm92ZXJsYXlSZWY/Lmhhc0F0dGFjaGVkKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZVBvcnRhbCgpIHtcclxuICAgIGlmICh0aGlzLnBvcnRhbEF0dGFjaGVkKCkpIHtcclxuICAgICAgdGhpcy5wb3J0YWw/Lm92ZXJsYXlSZWY/LmRldGFjaCgpO1xyXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZGVzdHJveVBvcnRhbCgpIHtcclxuICAgIHRoaXMucG9ydGFsPy5vdmVybGF5UmVmPy5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICBzaG93UG9ydGFsKCkge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5hbmltYXRpbmcpIHJldHVybjtcclxuICAgIGNvbnN0IGNvbmZpZzogT3ZlcmxheUNvbmZpZyA9IHtcclxuICAgICAgYmFja2Ryb3BDbGFzczogJycsXHJcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHRoaXMuc2V0UGxhY2VtZW50KCksXHJcbiAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKClcclxuICAgIH07XHJcbiAgICB0aGlzLnNldFBvc2l0aW9uKGNvbmZpZyk7XHJcbiAgICB0aGlzLnBvcnRhbCA9IHRoaXMucG9ydGFsU2VydmljZS5hdHRhY2goe1xyXG4gICAgICBjb250ZW50OiBYRGF0ZVJhbmdlUG9ydGFsQ29tcG9uZW50LFxyXG4gICAgICB2aWV3Q29udGFpbmVyUmVmOiB0aGlzLnZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgIG92ZXJsYXlDb25maWc6IGNvbmZpZ1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnBvcnRhbC5vdmVybGF5UmVmXHJcbiAgICAgID8ub3V0c2lkZVBvaW50ZXJFdmVudHMoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fdW5TdWJqZWN0KSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXREaXNwbGF5VmFsdWUodGhpcy5udW1iZXJWYWx1ZSk7XHJcbiAgICAgICAgdGhpcy5jbG9zZVN1YmplY3QubmV4dCgpO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuc2V0SW5zdGFuY2UoKTtcclxuICB9XHJcblxyXG4gIHNldFBvc2l0aW9uKGNvbmZpZzogT3ZlcmxheUNvbmZpZykge1xyXG4gICAgbGV0IHBvc2l0aW9uID0gY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kgYXMgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5O1xyXG4gICAgcG9zaXRpb24ucG9zaXRpb25DaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX3VuU3ViamVjdCkpLnN1YnNjcmliZSgocG9zOiBDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25DaGFuZ2UpID0+IHtcclxuICAgICAgY29uc3QgcGxhY2UgPSBYUG9ydGFsQ29ubmVjdGVkUG9zaXRpb24uZ2V0KHBvcy5jb25uZWN0aW9uUGFpcikgYXMgWENvcm5lcjtcclxuICAgICAgcGxhY2UgIT09IHRoaXMucGxhY2VtZW50ICYmIHRoaXMucG9zaXRpb25DaGFuZ2UubmV4dChwbGFjZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldEluc3RhbmNlKCkge1xyXG4gICAgbGV0IGNvbXBvbmVudFJlZiA9IHRoaXMucG9ydGFsPy5jb21wb25lbnRSZWY7XHJcbiAgICBpZiAoIWNvbXBvbmVudFJlZikgcmV0dXJuO1xyXG4gICAgT2JqZWN0LmFzc2lnbihjb21wb25lbnRSZWYuaW5zdGFuY2UsIHtcclxuICAgICAgdHlwZTogdGhpcy50eXBlLFxyXG4gICAgICB2YWx1ZTogdGhpcy5udW1iZXJWYWx1ZSxcclxuICAgICAgcGxhY2VtZW50OiB0aGlzLnBsYWNlbWVudCxcclxuICAgICAgcHJlc2V0OiB0aGlzLnByZXNldCxcclxuICAgICAgdmFsdWVDaGFuZ2U6IHRoaXMudmFsdWVDaGFuZ2UsXHJcbiAgICAgIHBvc2l0aW9uQ2hhbmdlOiB0aGlzLnBvc2l0aW9uQ2hhbmdlLFxyXG4gICAgICBjbG9zZVBvcnRhbDogKCkgPT4gdGhpcy5jbG9zZVN1YmplY3QubmV4dCgpLFxyXG4gICAgICBkZXN0cm95UG9ydGFsOiAoKSA9PiB0aGlzLmRlc3Ryb3lQb3J0YWwoKSxcclxuICAgICAgbm9kZUVtaXQ6IChub2RlOiBEYXRlLCBzdXJlID0gdHJ1ZSkgPT4gdGhpcy5vbk5vZGVDbGljayhub2RlLCBzdXJlKSxcclxuICAgICAgYW5pbWF0aW5nOiAoaW5nOiBib29sZWFuKSA9PiAodGhpcy5hbmltYXRpbmcgPSBpbmcpXHJcbiAgICB9KTtcclxuICAgIGNvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBvbk5vZGVDbGljayhkYXRlOiBEYXRlLCBzdXJlID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5pc0lucHV0ID0gZmFsc2U7XHJcbiAgICBpZiAoc3VyZSkge1xyXG4gICAgICB0aGlzLm51bWJlclZhbHVlID0gZGF0ZS5nZXRUaW1lKCk7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XHJcbiAgICAgIHRoaXMuc2V0RGlzcGxheVZhbHVlKHRoaXMubnVtYmVyVmFsdWUpO1xyXG4gICAgICB0aGlzLmNsb3NlU3ViamVjdC5uZXh0KCk7XHJcbiAgICAgIHRoaXMubW9kZWxDaGFuZ2UoKTtcclxuICAgICAgdGhpcy5ub2RlRW1pdC5lbWl0KHRoaXMubnVtYmVyVmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXREaXNwbGF5VmFsdWUoZGF0ZS5nZXRUaW1lKCkpO1xyXG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uSW5wdXQoKSB7XHJcbiAgICB0aGlzLmlzSW5wdXQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc2V0RGlzcGxheVZhbHVlKGRhdGVOdW1iZXI6IG51bWJlciB8IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuaXNJbnB1dCAmJiBpc05hTih0aGlzLmRpc3BsYXlWYWx1ZSkgJiYgIWlzTmFOKERhdGUucGFyc2UodGhpcy5kaXNwbGF5VmFsdWUpKSkge1xyXG4gICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuZGlzcGxheVZhbHVlLCB0aGlzLmZvcm1hdCk7XHJcbiAgICAgIHRoaXMubnVtYmVyVmFsdWUgPSBuZXcgRGF0ZSh0aGlzLmRpc3BsYXlWYWx1ZSkuZ2V0VGltZSgpO1xyXG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpO1xyXG4gICAgICB0aGlzLm1vZGVsQ2hhbmdlKCk7XHJcbiAgICAgIHRoaXMuaXNJbnB1dCA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlTnVtYmVyLCB0aGlzLmZvcm1hdCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRQbGFjZW1lbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wb3J0YWxTZXJ2aWNlLnNldFBsYWNlbWVudCh7XHJcbiAgICAgIGVsZW1lbnRSZWY6IHRoaXMuaW5wdXRHcm91cC5lbGVtZW50UmVmLFxyXG4gICAgICBwbGFjZW1lbnQ6IFt0aGlzLnBsYWNlbWVudCBhcyBYQ29ybmVyLCAnYm90dG9tLXN0YXJ0JywgJ2JvdHRvbS1lbmQnLCAndG9wLXN0YXJ0JywgJ3RvcC1lbmQnXSxcclxuICAgICAgdHJhbnNmb3JtT3JpZ2luT246ICd4LWRhdGUtcmFuZ2UtcG9ydGFsJ1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRQb3J0YWwoKSB7XHJcbiAgICB0aGlzLnBvcnRhbEF0dGFjaGVkKCkgJiYgdGhpcy5wb3J0YWw/Lm92ZXJsYXlSZWY/LnVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodGhpcy5zZXRQbGFjZW1lbnQoKSk7XHJcbiAgfVxyXG5cclxuICBzZXRDbGFzc01hcCgpIHtcclxuICAgIFhDbGVhckNsYXNzKHRoaXMubGFiZWxNYXApO1xyXG4gICAgdGhpcy5sYWJlbE1hcFtgeC10ZXh0LWFsaWduLSR7dGhpcy5sYWJlbEFsaWdufWBdID0gdGhpcy5sYWJlbEFsaWduID8gdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZm9ybUNvbnRyb2xDaGFuZ2VzKCkge1xyXG4gICAgdGhpcy5uZ09uSW5pdCgpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICNkYXRlUmFuZ2UgY2xhc3M9XCJ4LWRhdGUtcmFuZ2VcIiBbY2xhc3MueC1kYXRlLXJhbmdlLWZvY3VzXT1cImlzRm9jdXNcIj5cclxuICA8ZGl2IGNsYXNzPVwieC1kYXRlLXJhbmdlLXJvd1wiPlxyXG4gICAgPHgtaW5wdXQtZ3JvdXAgI2lucHV0R3JvdXAgY2xhc3M9XCJ4LWRhdGUtcmFuZ2UtZ3JvdXBcIiBib3JkZXJlZD1cImZhbHNlXCIgKGNsaWNrKT1cInNob3dQb3J0YWwoKVwiPlxyXG4gICAgICA8eC1pbnB1dCAjaW5wdXRTdGFydENvbSB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwi5byA5aeL5pel5pyfXCIgKHhGb2N1cyk9XCJpc0ZvY3VzID0gdHJ1ZVwiICh4Qmx1cik9XCJpc0ZvY3VzID0gZmFsc2VcIj48L3gtaW5wdXQ+XHJcbiAgICAgIDx4LWljb24gdHlwZT1cImZ0by1hcnJvdy1yaWdodFwiPjwveC1pY29uPlxyXG4gICAgICA8eC1pbnB1dCAjaW5wdXRFbmRDb20gdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIue7k+adn+aXpeacn1wiICh4Rm9jdXMpPVwiaXNGb2N1cyA9IHRydWVcIiAoeEJsdXIpPVwiaXNGb2N1cyA9IGZhbHNlXCI+PC94LWlucHV0PlxyXG4gICAgICA8eC1pY29uIFt0eXBlXT1cImljb25cIj48L3gtaWNvbj5cclxuICAgIDwveC1pbnB1dC1ncm91cD5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
307
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvbmctbmVzdC91aS9kYXRlLXBpY2tlci9kYXRlLXJhbmdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYi9uZy1uZXN0L3VpL2RhdGUtcGlja2VyL2RhdGUtcmFuZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQyx3QkFBd0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUNMLFNBQVMsRUFFVCxpQkFBaUIsRUFDakIsdUJBQXVCLEVBTXZCLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDcEcsT0FBTyxFQUNMLFFBQVEsRUFDUixPQUFPLEVBQ1AsU0FBUyxFQUNULFNBQVMsRUFFVCxXQUFXLEVBQ1gsU0FBUyxFQUVULFlBQVksRUFFYixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7Ozs7Ozs7QUFVMUUsTUFBTSxPQUFPLG1CQUFvQixTQUFRLGtCQUFrQjtJQXFEekQsWUFDUyxRQUFtQixFQUNuQixhQUE2QixFQUM1QixHQUFzQixFQUN0QixhQUE2QixFQUM3QixnQkFBa0MsRUFDbEMsUUFBa0IsRUFDbEIsT0FBZ0I7UUFFeEIsS0FBSyxFQUFFLENBQUM7UUFSRCxhQUFRLEdB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aUJBQzNEO3NRQUUyQyxTQUFTO3NCQUFsRCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0csVUFBVTtzQkFBcEQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgWFBvcnRhbFNlcnZpY2UsIFhQb3J0YWxPdmVybGF5UmVmLCBYUG9ydGFsQ29ubmVjdGVkUG9zaXRpb24gfSBmcm9tICdAbmctbmVzdC91aS9wb3J0YWwnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBSZW5kZXJlcjIsXHJcbiAgRWxlbWVudFJlZixcclxuICBPbkNoYW5nZXMsXHJcbiAgVmlld0NvbnRhaW5lclJlZixcclxuICBWaWV3Q2hpbGQsXHJcbiAgU2ltcGxlQ2hhbmdlc1xyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBYRGF0ZVBpY2tlck1vZGVsVHlwZSwgWERhdGVSYW5nZVByZWZpeCwgWERhdGVSYW5nZVByb3BlcnR5IH0gZnJvbSAnLi9kYXRlLXBpY2tlci5wcm9wZXJ0eSc7XHJcbmltcG9ydCB7XHJcbiAgWElzRW1wdHksXHJcbiAgWElzRGF0ZSxcclxuICBYSXNOdW1iZXIsXHJcbiAgWElzQ2hhbmdlLFxyXG4gIFhDb3JuZXIsXHJcbiAgWENsZWFyQ2xhc3MsXHJcbiAgWElzU3RyaW5nLFxyXG4gIFhDb25maWdTZXJ2aWNlLFxyXG4gIFhJc1VuZGVmaW5lZCxcclxuICBYQm9vbGVhblxyXG59IGZyb20gJ0BuZy1uZXN0L3VpL2NvcmUnO1xyXG5pbXBvcnQgeyBYSW5wdXRHcm91cENvbXBvbmVudCB9IGZyb20gJ0BuZy1uZXN0L3VpL2lucHV0JztcclxuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBPdmVybGF5LCBPdmVybGF5Q29uZmlnLCBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3ksIENvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbkNoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBYVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0BuZy1uZXN0L3VpL2Jhc2UtZm9ybSc7XHJcbmltcG9ydCB7IFhEYXRlUmFuZ2VQb3J0YWxDb21wb25lbnQgfSBmcm9tICcuL2RhdGUtcmFuZ2UtcG9ydGFsLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogYCR7WERhdGVSYW5nZVByZWZpeH1gLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXJhbmdlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kYXRlLXJhbmdlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBwcm92aWRlcnM6IFtYVmFsdWVBY2Nlc3NvcihYRGF0ZVJhbmdlQ29tcG9uZW50KSwgRGF0ZVBpcGVdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBYRGF0ZVJhbmdlQ29tcG9uZW50IGV4dGVuZHMgWERhdGVSYW5nZVByb3BlcnR5IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gIEBWaWV3Q2hpbGQoJ2RhdGVSYW5nZScsIHsgc3RhdGljOiB0cnVlIH0pIGRhdGVSYW5nZSE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnaW5wdXRHcm91cCcsIHsgc3RhdGljOiB0cnVlIH0pIGlucHV0R3JvdXAhOiBYSW5wdXRHcm91cENvbXBvbmVudDtcclxuXHJcbiAgbW9kZWxUeXBlOiBYRGF0ZVBpY2tlck1vZGVsVHlwZSA9ICdkYXRlJztcclxuICBudW1iZXJWYWx1ZSE6IG51bWJlcltdO1xyXG4gIGlzSW5wdXQgPSBmYWxzZTtcclxuXHJcbiAgZ2V0IGdldFJlcXVpcmVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucmVxdWlyZWQgJiYgWElzRW1wdHkodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcclxuICAgIGlmIChYSXNVbmRlZmluZWQodmFsdWUpKSB2YWx1ZSA9IFtdO1xyXG4gICAgaWYgKHZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgaWYgKFhJc0RhdGUodmFsdWVbMF0pKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbFR5cGUgPSAnZGF0ZSc7XHJcbiAgICAgICAgdGhpcy5udW1iZXJWYWx1ZSA9IHZhbHVlLmdldFRpbWUoKTtcclxuICAgICAgfSBlbHNlIGlmIChYSXNOdW1iZXIodmFsdWVbMF0pKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbFR5cGUgPSAnbnVtYmVyJztcclxuICAgICAgICB0aGlzLm51bWJlclZhbHVlID0gdmFsdWU7XHJcbiAgICAgIH0gZWxzZSBpZiAoWElzU3RyaW5nKHZhbHVlWzBdKSkge1xyXG4gICAgICAgIHRoaXMubW9kZWxUeXBlID0gJ3N0cmluZyc7XHJcbiAgICAgICAgY29uc3QgdmFsdWVUaW1lID0gdmFsdWUubWFwKCh4OiBzdHJpbmcpID0+IG5ldyBEYXRlKHgpLmdldFRpbWUoKSk7XHJcbiAgICAgICAgdGhpcy5udW1iZXJWYWx1ZSA9ICFpc05hTih2YWx1ZVRpbWVbMF0pID8gdmFsdWVUaW1lIDogW107XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuc2V0RGlzcGxheVZhbHVlKHRoaXMubnVtYmVyVmFsdWUpO1xyXG4gICAgdGhpcy52YWx1ZUNoYW5nZS5uZXh0KHRoaXMubnVtYmVyVmFsdWUpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgZW50ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpbnB1dENsZWFyYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGFuaW1hdGluZyA9IGZhbHNlO1xyXG4gIGRpc3BsYXlWYWx1ZTogc3RyaW5nW10gPSBbXTtcclxuICBwb3J0YWwhOiBYUG9ydGFsT3ZlcmxheVJlZjxYRGF0ZVJhbmdlUG9ydGFsQ29tcG9uZW50PjtcclxuICBpY29uOiBzdHJpbmcgPSAnZnRvLWNhbGVuZGFyJztcclxuICBib3ghOiBET01SZWN0O1xyXG4gIHByb3RhbEhlaWdodCE6IG51bWJlcjtcclxuICBtYXhOb2RlczogbnVtYmVyID0gNjtcclxuICBwcm90YWxUb2JvdHRvbTogYm9vbGVhbiA9IHRydWU7XHJcbiAgdmFsdWVDaGFuZ2U6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgZGF0YUNoYW5nZTogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcclxuICBwb3NpdGlvbkNoYW5nZTogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcclxuICBjbG9zZVN1YmplY3Q6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIHN0YXJ0RGlzcGxheTogc3RyaW5nIHwgbnVtYmVyID0gJyc7XHJcbiAgZW5kRGlzcGxheTogc3RyaW5nIHwgbnVtYmVyID0gJyc7XHJcbiAgc3RhcnRBY3RpdmU6IFhCb29sZWFuID0gZmFsc2U7XHJcbiAgZW5kQWN0aXZlOiBYQm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3VuU3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBwdWJsaWMgY29uZmlnU2VydmljZTogWENvbmZpZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHBvcnRhbFNlcnZpY2U6IFhQb3J0YWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGUsXHJcbiAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXlcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc2V0RmxleCh0aGlzLmRhdGVSYW5nZS5uYXRpdmVFbGVtZW50LCB0aGlzLnJlbmRlcmVyLCB0aGlzLmp1c3RpZnksIHRoaXMuYWxpZ24sIHRoaXMuZGlyZWN0aW9uKTtcclxuICAgIHRoaXMuc2V0Rm9ybWF0KCk7XHJcbiAgICB0aGlzLnNldENsYXNzTWFwKCk7XHJcbiAgICB0aGlzLnNldFN1YmplY3QoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuc2V0UG9ydGFsKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBjb25zdCB7IHR5cGUgfSA9IGNoYW5nZXM7XHJcbiAgICBpZiAoWElzQ2hhbmdlKHR5cGUpKSB7XHJcbiAgICAgIHRoaXMuc2V0Rm9ybWF0KCk7XHJcbiAgICAgIHRoaXMuc2V0RGlzcGxheVZhbHVlKHRoaXMubnVtYmVyVmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl91blN1YmplY3QubmV4dCgpO1xyXG4gICAgdGhpcy5fdW5TdWJqZWN0LnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBzZXRTdWJqZWN0KCkge1xyXG4gICAgdGhpcy5jbG9zZVN1YmplY3QucGlwZSh0YWtlVW50aWwodGhpcy5fdW5TdWJqZWN0KSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5jbG9zZVBvcnRhbCgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRGb3JtYXQoKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtYXQgIT09ICd5eXl5LU1NLWRkJykgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgIHRoaXMuZm9ybWF0ID0gJ3l5eXktTU0tZGQnO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICd5ZWFyJykge1xyXG4gICAgICB0aGlzLmZvcm1hdCA9ICd5eXl5JztcclxuICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSAnbW9udGgnKSB7XHJcbiAgICAgIHRoaXMuZm9ybWF0ID0gJ3l5eXktTU0nO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdkYXRlLXRpbWUnKSB7XHJcbiAgICAgIHRoaXMuZm9ybWF0ID0gJ3l5eXktTU0tZGQgSEg6bW06c3MnO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdkYXRlLWhvdXInKSB7XHJcbiAgICAgIHRoaXMuZm9ybWF0ID0gJ3l5eXktTU0tZGQgSEgnO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdkYXRlLW1pbnV0ZScpIHtcclxuICAgICAgdGhpcy5mb3JtYXQgPSAneXl5eS1NTS1kZCBISDptbSc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtZW50ZXIoKSB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgdGhpcy5lbnRlciA9IHRydWU7XHJcbiAgICBpZiAoIVhJc0VtcHR5KHRoaXMubnVtYmVyVmFsdWUpKSB7XHJcbiAgICAgIHRoaXMuaWNvbiA9ICcnO1xyXG4gICAgICB0aGlzLmlucHV0Q2xlYXJhYmxlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbWxlYXZlKCkge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcclxuICAgIHRoaXMuZW50ZXIgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLmlucHV0Q2xlYXJhYmxlKSB7XHJcbiAgICAgIHRoaXMuaWNvbiA9ICdmdG8tY2FsZW5kYXInO1xyXG4gICAgICB0aGlzLmlucHV0Q2xlYXJhYmxlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsZWFyRW1pdCgpIHtcclxuICAgIHRoaXMudmFsdWUgPSBbXTtcclxuICAgIHRoaXMubnVtYmVyVmFsdWUgPSBbXTtcclxuICAgIHRoaXMuZGlzcGxheVZhbHVlID0gW107XHJcbiAgICB0aGlzLm1sZWF2ZSgpO1xyXG4gICAgdGhpcy52YWx1ZUNoYW5nZS5uZXh0KHRoaXMubnVtYmVyVmFsdWUpO1xyXG4gICAgdGhpcy5tb2RlbENoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgbW9kZWxDaGFuZ2UoKSB7XHJcbiAgICBpZiAodGhpcy5vbkNoYW5nZSkge1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuZ2V0VmFsdWUoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRWYWx1ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGVsVHlwZSA9PT0gJ2RhdGUnXHJcbiAgICAgID8gdGhpcy5udW1iZXJWYWx1ZS5tYXAoKHgpID0+IG5ldyBEYXRlKHgpKVxyXG4gICAgICA6IHRoaXMubW9kZWxUeXBlID09PSAnc3RyaW5nJ1xyXG4gICAgICA/IHRoaXMubnVtYmVyVmFsdWUubWFwKCh4KSA9PiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh4LCB0aGlzLmZvcm1hdCkpXHJcbiAgICAgIDogdGhpcy5udW1iZXJWYWx1ZTtcclxuICB9XHJcblxyXG4gIHBvcnRhbEF0dGFjaGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucG9ydGFsPy5vdmVybGF5UmVmPy5oYXNBdHRhY2hlZCgpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VQb3J0YWwoKSB7XHJcbiAgICBpZiAodGhpcy5wb3J0YWxBdHRhY2hlZCgpKSB7XHJcbiAgICAgIHRoaXMucG9ydGFsPy5vdmVybGF5UmVmPy5kZXRhY2goKTtcclxuICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGRlc3Ryb3lQb3J0YWwoKSB7XHJcbiAgICB0aGlzLnBvcnRhbD8ub3ZlcmxheVJlZj8uZGlzcG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgc2hvd1BvcnRhbCgkZXZlbnQ6IEV2ZW50LCB0eXBlPzogJ3N0YXJ0JyB8ICdlbmQnKSB7XHJcbiAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLmFuaW1hdGluZykgcmV0dXJuO1xyXG4gICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xyXG4gICAgdGhpcy5zdGFydEFjdGl2ZSA9IHR5cGUgPT09ICdzdGFydCc7XHJcbiAgICB0aGlzLmVuZEFjdGl2ZSA9IHR5cGUgPT09ICdlbmQnO1xyXG4gICAgY29uc3QgY29uZmlnOiBPdmVybGF5Q29uZmlnID0ge1xyXG4gICAgICBiYWNrZHJvcENsYXNzOiAnJyxcclxuICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5zZXRQbGFjZW1lbnQoKSxcclxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKVxyXG4gICAgfTtcclxuICAgIHRoaXMuc2V0UG9zaXRpb24oY29uZmlnKTtcclxuICAgIHRoaXMucG9ydGFsID0gdGhpcy5wb3J0YWxTZXJ2aWNlLmF0dGFjaCh7XHJcbiAgICAgIGNvbnRlbnQ6IFhEYXRlUmFuZ2VQb3J0YWxDb21wb25lbnQsXHJcbiAgICAgIHZpZXdDb250YWluZXJSZWY6IHRoaXMudmlld0NvbnRhaW5lclJlZixcclxuICAgICAgb3ZlcmxheUNvbmZpZzogY29uZmlnXHJcbiAgICB9KTtcclxuICAgIHRoaXMucG9ydGFsLm92ZXJsYXlSZWZcclxuICAgICAgPy5vdXRzaWRlUG9pbnRlckV2ZW50cygpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl91blN1YmplY3QpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnNldERpc3BsYXlWYWx1ZSh0aGlzLm51bWJlclZhbHVlKTtcclxuICAgICAgICB0aGlzLmNsb3NlU3ViamVjdC5uZXh0KCk7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5zZXRJbnN0YW5jZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0UG9zaXRpb24oY29uZmlnOiBPdmVybGF5Q29uZmlnKSB7XHJcbiAgICBsZXQgcG9zaXRpb24gPSBjb25maWcucG9zaXRpb25TdHJhdGVneSBhcyBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3k7XHJcbiAgICBwb3NpdGlvbi5wb3NpdGlvbkNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fdW5TdWJqZWN0KSkuc3Vic2NyaWJlKChwb3M6IENvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbkNoYW5nZSkgPT4ge1xyXG4gICAgICBjb25zdCBwbGFjZSA9IFhQb3J0YWxDb25uZWN0ZWRQb3NpdGlvbi5nZXQocG9zLmNvbm5lY3Rpb25QYWlyKSBhcyBYQ29ybmVyO1xyXG4gICAgICBwbGFjZSAhPT0gdGhpcy5wbGFjZW1lbnQgJiYgdGhpcy5wb3NpdGlvbkNoYW5nZS5uZXh0KHBsYWNlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0SW5zdGFuY2UoKSB7XHJcbiAgICBsZXQgY29tcG9uZW50UmVmID0gdGhpcy5wb3J0YWw/LmNvbXBvbmVudFJlZjtcclxuICAgIGlmICghY29tcG9uZW50UmVmKSByZXR1cm47XHJcbiAgICBPYmplY3QuYXNzaWduKGNvbXBvbmVudFJlZi5pbnN0YW5jZSwge1xyXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXHJcbiAgICAgIHZhbHVlOiB0aGlzLm51bWJlclZhbHVlLFxyXG4gICAgICBwbGFjZW1lbnQ6IHRoaXMucGxhY2VtZW50LFxyXG4gICAgICBwcmVzZXQ6IHRoaXMucHJlc2V0LFxyXG4gICAgICB2YWx1ZUNoYW5nZTogdGhpcy52YWx1ZUNoYW5nZSxcclxuICAgICAgcG9zaXRpb25DaGFuZ2U6IHRoaXMucG9zaXRpb25DaGFuZ2UsXHJcbiAgICAgIGNsb3NlUG9ydGFsOiAoKSA9PiB0aGlzLmNsb3NlU3ViamVjdC5uZXh0KCksXHJcbiAgICAgIGRlc3Ryb3lQb3J0YWw6ICgpID0+IHRoaXMuZGVzdHJveVBvcnRhbCgpLFxyXG4gICAgICBub2RlRW1pdDogKGRhdGVzOiBEYXRlW10sIHN1cmUgPSB0cnVlKSA9PiB0aGlzLm9uTm9kZUNsaWNrKGRhdGVzLCBzdXJlKSxcclxuICAgICAgc3RhcnROb2RlRW1pdDogKG5vZGU6IERhdGUpID0+IHRoaXMuc3RhcnROb2RlQ2xpY2sobm9kZSksXHJcbiAgICAgIGVuZE5vZGVFbWl0OiAobm9kZTogRGF0ZSkgPT4gdGhpcy5lbmROb2RlQ2xpY2sobm9kZSksXHJcbiAgICAgIGFuaW1hdGluZzogKGluZzogYm9vbGVhbikgPT4gKHRoaXMuYW5pbWF0aW5nID0gaW5nKVxyXG4gICAgfSk7XHJcbiAgICBjb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgc3RhcnROb2RlQ2xpY2sobm9kZTogRGF0ZSkge1xyXG4gICAgdGhpcy5zdGFydERpc3BsYXkgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShub2RlLCB0aGlzLmZvcm1hdCkgYXMgc3RyaW5nO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgZW5kTm9kZUNsaWNrKG5vZGU6IERhdGUpIHtcclxuICAgIHRoaXMuZW5kRGlzcGxheSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKG5vZGUsIHRoaXMuZm9ybWF0KSBhcyBzdHJpbmc7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBvbk5vZGVDbGljayhkYXRlczogRGF0ZVtdLCBzdXJlID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5pc0lucHV0ID0gZmFsc2U7XHJcbiAgICBpZiAoc3VyZSkge1xyXG4gICAgICB0aGlzLm51bWJlclZhbHVlID0gZGF0ZXMubWFwKCh4KSA9PiB4LmdldFRpbWUoKSk7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XHJcbiAgICAgIHRoaXMuc2V0RGlzcGxheVZhbHVlKHRoaXMubnVtYmVyVmFsdWUpO1xyXG4gICAgICB0aGlzLmNsb3NlU3ViamVjdC5uZXh0KCk7XHJcbiAgICAgIHRoaXMubW9kZWxDaGFuZ2UoKTtcclxuICAgICAgdGhpcy5ub2RlRW1pdC5lbWl0KHRoaXMubnVtYmVyVmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXREaXNwbGF5VmFsdWUoZGF0ZXMubWFwKCh4KSA9PiB4LmdldFRpbWUoKSkpO1xyXG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uSW5wdXQoKSB7XHJcbiAgICB0aGlzLmlzSW5wdXQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc2V0RGlzcGxheVZhbHVlKGRhdGVOdW1iZXI6IG51bWJlcltdKSB7XHJcbiAgICAvLyBpZiAodGhpcy5pc0lucHV0ICYmIGlzTmFOKHRoaXMuc3RhcnREaXNwbGF5KSAmJiAhaXNOYU4oRGF0ZS5wYXJzZSh0aGlzLmRpc3BsYXlWYWx1ZSkpKSB7XHJcbiAgICAvLyAgIHRoaXMuZGlzcGxheVZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5kaXNwbGF5VmFsdWUsIHRoaXMuZm9ybWF0KTtcclxuICAgIC8vICAgdGhpcy5udW1iZXJWYWx1ZSA9IG5ldyBEYXRlKHRoaXMuZGlzcGxheVZhbHVlKS5nZXRUaW1lKCk7XHJcbiAgICAvLyAgIHRoaXMudmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XHJcbiAgICAvLyAgIHRoaXMubW9kZWxDaGFuZ2UoKTtcclxuICAgIC8vICAgdGhpcy5pc0lucHV0ID0gZmFsc2U7XHJcbiAgICAvLyB9IGVsc2Uge1xyXG4gICAgdGhpcy5kaXNwbGF5VmFsdWUgPSBkYXRlTnVtYmVyLm1hcCgoeCkgPT4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oeCwgdGhpcy5mb3JtYXQpKSBhcyBzdHJpbmdbXTtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIHNldFBsYWNlbWVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLnBvcnRhbFNlcnZpY2Uuc2V0UGxhY2VtZW50KHtcclxuICAgICAgZWxlbWVudFJlZjogdGhpcy5pbnB1dEdyb3VwLmVsZW1lbnRSZWYsXHJcbiAgICAgIHBsYWNlbWVudDogW3RoaXMucGxhY2VtZW50IGFzIFhDb3JuZXIsICdib3R0b20tc3RhcnQnLCAnYm90dG9tLWVuZCcsICd0b3Atc3RhcnQnLCAndG9wLWVuZCddLFxyXG4gICAgICB0cmFuc2Zvcm1PcmlnaW5PbjogJ3gtZGF0ZS1yYW5nZS1wb3J0YWwnXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFBvcnRhbCgpIHtcclxuICAgIHRoaXMucG9ydGFsQXR0YWNoZWQoKSAmJiB0aGlzLnBvcnRhbD8ub3ZlcmxheVJlZj8udXBkYXRlUG9zaXRpb25TdHJhdGVneSh0aGlzLnNldFBsYWNlbWVudCgpKTtcclxuICB9XHJcblxyXG4gIHNldENsYXNzTWFwKCkge1xyXG4gICAgWENsZWFyQ2xhc3ModGhpcy5sYWJlbE1hcCk7XHJcbiAgICB0aGlzLmxhYmVsTWFwW2B4LXRleHQtYWxpZ24tJHt0aGlzLmxhYmVsQWxpZ259YF0gPSB0aGlzLmxhYmVsQWxpZ24gPyB0cnVlIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBmb3JtQ29udHJvbENoYW5nZXMoKSB7XHJcbiAgICB0aGlzLm5nT25Jbml0KCk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgI2RhdGVSYW5nZSBjbGFzcz1cIngtZGF0ZS1yYW5nZVwiIFtjbGFzcy54LWRhdGUtcmFuZ2UtYWN0aXZlXT1cImFjdGl2ZVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJ4LWRhdGUtcmFuZ2Utcm93XCI+XHJcbiAgICA8eC1pbnB1dC1ncm91cCAjaW5wdXRHcm91cCBjbGFzcz1cIngtZGF0ZS1yYW5nZS1ncm91cFwiIGJvcmRlcmVkPVwiZmFsc2VcIiAoY2xpY2spPVwic2hvd1BvcnRhbCgkZXZlbnQpXCI+XHJcbiAgICAgIDx4LWlucHV0XHJcbiAgICAgICAgI2lucHV0U3RhcnRDb21cclxuICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCLlvIDlp4vml6XmnJ9cIlxyXG4gICAgICAgIFsoYWN0aXZlKV09XCJzdGFydEFjdGl2ZVwiXHJcbiAgICAgICAgKGNsaWNrKT1cInNob3dQb3J0YWwoJGV2ZW50LCAnc3RhcnQnKVwiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJzdGFydERpc3BsYXlcIlxyXG4gICAgICA+PC94LWlucHV0PlxyXG4gICAgICA8eC1pY29uIHR5cGU9XCJmdG8tYXJyb3ctcmlnaHRcIj48L3gtaWNvbj5cclxuICAgICAgPHgtaW5wdXRcclxuICAgICAgICAjaW5wdXRFbmRDb21cclxuICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCLnu5PmnZ/ml6XmnJ9cIlxyXG4gICAgICAgIFsoYWN0aXZlKV09XCJlbmRBY3RpdmVcIlxyXG4gICAgICAgIChjbGljayk9XCJzaG93UG9ydGFsKCRldmVudCwgJ2VuZCcpXCJcclxuICAgICAgICBbKG5nTW9kZWwpXT1cImVuZERpc3BsYXlcIlxyXG4gICAgICA+PC94LWlucHV0PlxyXG4gICAgICA8eC1pY29uIFt0eXBlXT1cImljb25cIj48L3gtaWNvbj5cclxuICAgIDwveC1pbnB1dC1ncm91cD5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -2,16 +2,19 @@ import { Component, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/
2
2
  import { chunk, XIsChange } from '@ng-nest/ui/core';
3
3
  import { XPickerDatePrefix, XPickerDateProperty } from './date-picker.property';
4
4
  import { Subject } from 'rxjs';
5
- import { takeUntil } from 'rxjs/operators';
5
+ import { map, takeUntil } from 'rxjs/operators';
6
+ import { DatePipe, LowerCasePipe } from '@angular/common';
6
7
  import * as i0 from "@angular/core";
7
- import * as i1 from "@ng-nest/ui/core";
8
- import * as i2 from "@ng-nest/ui/i18n";
9
- import * as i3 from "@ng-nest/ui/button";
10
- import * as i4 from "@angular/common";
8
+ import * as i1 from "@angular/common";
9
+ import * as i2 from "@ng-nest/ui/core";
10
+ import * as i3 from "@ng-nest/ui/i18n";
11
+ import * as i4 from "@ng-nest/ui/button";
11
12
  export class XPickerDateComponent extends XPickerDateProperty {
12
- constructor(renderer, cdr, configService, i18n) {
13
+ constructor(renderer, datePipe, lowerCasePipe, cdr, configService, i18n) {
13
14
  super();
14
15
  this.renderer = renderer;
16
+ this.datePipe = datePipe;
17
+ this.lowerCasePipe = lowerCasePipe;
15
18
  this.cdr = cdr;
16
19
  this.configService = configService;
17
20
  this.i18n = i18n;
@@ -26,13 +29,20 @@ export class XPickerDateComponent extends XPickerDateProperty {
26
29
  ];
27
30
  this.now = new Date();
28
31
  this.dates = [];
32
+ this.locale = {};
29
33
  this._unSubject = new Subject();
30
34
  }
31
35
  ngOnInit() {
32
- this.i18n.localeChange.pipe(takeUntil(this._unSubject)).subscribe(() => this.cdr.markForCheck());
36
+ this.i18n.localeChange
37
+ .pipe(map((x) => x.datePicker), takeUntil(this._unSubject))
38
+ .subscribe((x) => {
39
+ this.locale = x;
40
+ this.cdr.markForCheck();
41
+ });
33
42
  }
34
43
  ngOnChanges(simples) {
35
- XIsChange(simples.display) && this.init();
44
+ const { display } = simples;
45
+ XIsChange(display) && this.init();
36
46
  }
37
47
  ngOnDestory() {
38
48
  this._unSubject.next();
@@ -82,20 +92,45 @@ export class XPickerDateComponent extends XPickerDateProperty {
82
92
  this.modelChange.emit(date);
83
93
  this.cdr.markForCheck();
84
94
  }
85
- trackByNode(index, item) {
95
+ getLocaleMonth(date) {
96
+ return this.locale[this.lowerCasePipe.transform(this.datePipe.transform(date, 'LLLL'))];
97
+ }
98
+ setDisplay(date) {
99
+ this.display = new Date(date.getFullYear(), date.getMonth(), 1);
100
+ this.setDays(this.display);
101
+ }
102
+ nextMonth(num) {
103
+ let date = new Date(this.display);
104
+ date.setMonth(date.getMonth() + num);
105
+ this.setDisplay(date);
106
+ this.cdr.detectChanges();
107
+ }
108
+ nextYear(num) {
109
+ let date = new Date(this.display);
110
+ date.setFullYear(date.getFullYear() + num);
111
+ this.setDisplay(date);
112
+ this.cdr.detectChanges();
113
+ }
114
+ typeOnChange(type) {
115
+ this.type = type;
116
+ this.typeChange.emit(type);
117
+ this.cdr.detectChanges();
118
+ }
119
+ trackByNode(_index, item) {
86
120
  return item;
87
121
  }
88
122
  }
89
- /** @nocollapse */ XPickerDateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.3", ngImport: i0, type: XPickerDateComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i1.XConfigService }, { token: i2.XI18nService }], target: i0.ɵɵFactoryTarget.Component });
90
- /** @nocollapse */ XPickerDateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.3", type: XPickerDateComponent, selector: "x-picker-date", usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"x-picker-date\" [class.x-date-picker-datetemp]=\"dateTemp\">\r\n <table class=\"x-picker-date-table\" cellspacing=\"0\" cellpadding=\"0\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let title of titles; trackBy: trackByNode\">{{ title | xI18n }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let weeks of dates\">\r\n <ng-container *ngFor=\"let week of weeks; trackBy: trackByNode\">\r\n <td\r\n [class.x-date-last-or-next]=\"(week | date: 'yyyyMM') !== (display | date: 'yyyyMM')\"\r\n [class.x-date-now]=\"(week | date: 'yyyyMMdd') === (now | date: 'yyyyMMdd')\"\r\n (click)=\"dateTemp && dateClick(week)\"\r\n >\r\n <x-button\r\n *ngIf=\"!dateTemp\"\r\n type=\"text\"\r\n size=\"mini\"\r\n title=\"{{ week | date: 'yyyy-MM-dd' }}\"\r\n [activated]=\"(week | date: 'yyyyMMdd') === (model | date: 'yyyyMMdd')\"\r\n (click)=\"dateClick(week)\"\r\n >{{ week | date: 'd' }}</x-button\r\n >\r\n <ng-container *ngIf=\"dateTemp\">\r\n <ng-container *ngTemplateOutlet=\"dateTemp; context: { date$: week }\"></ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</div>\r\n", styles: [".x-picker-date{margin:0;padding:0}.x-picker-date-table{width:100%;border-collapse:collapse;border-spacing:0}.x-picker-date-table th{font-weight:400;height:2rem}.x-picker-date-table td{height:2rem;padding:.125rem 0;text-align:center}.x-picker-date-table td x-button .x-button{width:1.625rem;height:1.5rem;margin:0 auto;border:.0625rem solid #0000}.x-picker-date-table td x-button .x-button:hover{background-color:var(--x-primary-900)}.x-picker-date-table td x-button .x-button-activated,.x-picker-date-table td x-button .x-button-activated:hover{color:var(--x-background-100);background-color:var(--x-primary)}.x-picker-date-table td.x-date-last-or-next x-button .x-button{color:var(--x-text-400)}.x-picker-date-table td.x-date-now x-button .x-button{color:var(--x-primary);background-color:initial;border-color:var(--x-primary)}"], components: [{ type: i3.XButtonComponent, selector: "x-button" }], directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "xI18n": i2.XI18nPipe, "date": i4.DatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
91
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.3", ngImport: i0, type: XPickerDateComponent, decorators: [{
123
+ /** @nocollapse */ XPickerDateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: XPickerDateComponent, deps: [{ token: i0.Renderer2 }, { token: i1.DatePipe }, { token: i1.LowerCasePipe }, { token: i0.ChangeDetectorRef }, { token: i2.XConfigService }, { token: i3.XI18nService }], target: i0.ɵɵFactoryTarget.Component });
124
+ /** @nocollapse */ XPickerDateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.5", type: XPickerDateComponent, selector: "x-picker-date", providers: [DatePipe, LowerCasePipe], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"x-picker-date\" [class.x-date-picker-datetemp]=\"dateTemp\">\r\n <div class=\"x-picker-date-header\" *ngIf=\"showHeader\">\r\n <x-button icon=\"fto-chevrons-left\" size=\"small\" onlyIcon (click)=\"nextYear(-1)\"></x-button>\r\n <x-button icon=\"fto-chevron-left\" size=\"small\" onlyIcon (click)=\"nextMonth(-1)\"></x-button>\r\n <div class=\"x-picker-date-year-month\">\r\n <x-button type=\"text\" size=\"small\" (click)=\"typeOnChange('year')\">{{ display | date: 'yyyy' }}{{ locale.year }}</x-button>\r\n <x-button type=\"text\" size=\"small\" (click)=\"typeOnChange('month')\">{{ getLocaleMonth(display) }}</x-button>\r\n </div>\r\n <x-button icon=\"fto-chevron-right\" size=\"small\" onlyIcon (click)=\"nextMonth(1)\"></x-button>\r\n <x-button icon=\"fto-chevrons-right\" size=\"small\" onlyIcon (click)=\"nextYear(1)\"></x-button>\r\n </div>\r\n <div class=\"x-picker-date-body\">\r\n <table cellspacing=\"0\" cellpadding=\"0\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let title of titles; trackBy: trackByNode\">{{ title | xI18n }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let weeks of dates\">\r\n <ng-container *ngFor=\"let week of weeks; trackBy: trackByNode\">\r\n <td\r\n [class.x-date-last-or-next]=\"(week | date: 'yyyyMM') !== (display | date: 'yyyyMM')\"\r\n [class.x-date-now]=\"(week | date: 'yyyyMMdd') === (now | date: 'yyyyMMdd')\"\r\n (click)=\"dateTemp && dateClick(week)\"\r\n >\r\n <x-button\r\n *ngIf=\"!dateTemp\"\r\n type=\"text\"\r\n size=\"mini\"\r\n title=\"{{ week | date: 'yyyy-MM-dd' }}\"\r\n [activated]=\"!rangePicker && (week | date: 'yyyyMMdd') === (model | date: 'yyyyMMdd')\"\r\n (click)=\"dateClick(week)\"\r\n >{{ week | date: 'd' }}</x-button\r\n >\r\n <ng-container *ngIf=\"dateTemp\">\r\n <ng-container *ngTemplateOutlet=\"dateTemp; context: { date$: week }\"></ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.x-picker-date{margin:0;padding:0}.x-picker-date-header{display:flex;align-items:center;justify-content:space-between;padding:.5rem;border-bottom:var(--x-border-width) solid var(--x-border)}.x-picker-date-year-month{flex:1;text-align:center}.x-picker-date-body{padding:.5rem}.x-picker-date-body>table{width:100%;border-collapse:collapse;border-spacing:0}.x-picker-date-body>table th{font-weight:400;height:2rem;color:var(--x-text-400)}.x-picker-date-body>table td{padding:.25rem 0;text-align:center}.x-picker-date-body>table td x-button .x-button{width:1.625rem;height:1.5rem;margin:0 auto;border:.0625rem solid transparent}.x-picker-date-body>table td x-button .x-button:hover{background-color:var(--x-primary-900)}.x-picker-date-body>table td x-button .x-button-activated{color:var(--x-background-100);background-color:var(--x-primary)}.x-picker-date-body>table td x-button .x-button-activated:hover{color:var(--x-background-100);background-color:var(--x-primary)}.x-picker-date-body>table td.x-date-last-or-next x-button .x-button{color:var(--x-text-700)}.x-picker-date-body>table td.x-date-now x-button .x-button:not(.x-button-activated){color:var(--x-primary);background-color:transparent;border-color:var(--x-primary)}\n"], components: [{ type: i4.XButtonComponent, selector: "x-button" }], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "date": i1.DatePipe, "xI18n": i3.XI18nPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
125
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: XPickerDateComponent, decorators: [{
92
126
  type: Component,
93
127
  args: [{
94
128
  selector: `${XPickerDatePrefix}`,
95
129
  templateUrl: './picker-date.component.html',
96
130
  styleUrls: ['./picker-date.component.scss'],
97
131
  encapsulation: ViewEncapsulation.None,
98
- changeDetection: ChangeDetectionStrategy.OnPush
132
+ changeDetection: ChangeDetectionStrategy.OnPush,
133
+ providers: [DatePipe, LowerCasePipe]
99
134
  }]
100
- }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i1.XConfigService }, { type: i2.XI18nService }]; } });
101
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlja2VyLWRhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvZGF0ZS1waWNrZXIvcGlja2VyLWRhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvZGF0ZS1waWNrZXIvcGlja2VyLWRhdGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsdUJBQXVCLEVBS3hCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFrQixNQUFNLGtCQUFrQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFTM0MsTUFBTSxPQUFPLG9CQUFxQixTQUFRLG1CQUFtQjtJQWMzRCxZQUFtQixRQUFtQixFQUFTLEdBQXNCLEVBQVMsYUFBNkIsRUFBUyxJQUFrQjtRQUNwSSxLQUFLLEVBQUUsQ0FBQztRQURTLGFBQVEsR0FBUixRQUFRLENBQVc7UUFBUyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUFTLGtCQUFhLEdBQWIsYUFBYSxDQUFnQjtRQUFTLFNBQUksR0FBSixJQUFJLENBQWM7UUFidEksV0FBTSxHQUFHO1lBQ1AsbUJBQW1CO1lBQ25CLG9CQUFvQjtZQUNwQixzQkFBc0I7WUFDdEIscUJBQXFCO1lBQ3JCLG1CQUFtQjtZQUNuQixxQkFBcUI7WUFDckIsbUJBQW1CO1NBQ3BCLENBQUM7UUFDRixRQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNqQixVQUFLLEdBQWEsRUFBRSxDQUFDO1FBQ2IsZUFB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O1lBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM1RDtRQUVELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFNBQVMsQ0FBQyxJQUFVO1FBQ2xCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFhLEVBQUUsSUFBbUI7UUFDNUMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOztvSUF0RlUsb0JBQW9CO3dIQUFwQixvQkFBb0IsaUdDdEJqQyx3M0NBaUNBOzJGRFhhLG9CQUFvQjtrQkFQaEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsR0FBRyxpQkFBaUIsRUFBRTtvQkFDaEMsV0FBVyxFQUFFLDhCQUE4QjtvQkFDM0MsU0FBUyxFQUFFLENBQUMsOEJBQThCLENBQUM7b0JBQzNDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBSZW5kZXJlcjIsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIFNpbXBsZUNoYW5nZXNcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgY2h1bmssIFhJc0NoYW5nZSwgWENvbmZpZ1NlcnZpY2UgfSBmcm9tICdAbmctbmVzdC91aS9jb3JlJztcclxuaW1wb3J0IHsgWFBpY2tlckRhdGVQcmVmaXgsIFhQaWNrZXJEYXRlUHJvcGVydHkgfSBmcm9tICcuL2RhdGUtcGlja2VyLnByb3BlcnR5JztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBYSTE4blNlcnZpY2UgfSBmcm9tICdAbmctbmVzdC91aS9pMThuJztcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IGAke1hQaWNrZXJEYXRlUHJlZml4fWAsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3BpY2tlci1kYXRlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9waWNrZXItZGF0ZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIFhQaWNrZXJEYXRlQ29tcG9uZW50IGV4dGVuZHMgWFBpY2tlckRhdGVQcm9wZXJ0eSBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XHJcbiAgdGl0bGVzID0gW1xyXG4gICAgJ2RhdGVQaWNrZXIubW9uZGF5JyxcclxuICAgICdkYXRlUGlja2VyLnR1ZXNkYXknLFxyXG4gICAgJ2RhdGVQaWNrZXIud2VkbmVzZGF5JyxcclxuICAgICdkYXRlUGlja2VyLnRodXJzZGF5JyxcclxuICAgICdkYXRlUGlja2VyLmZyaWRheScsXHJcbiAgICAnZGF0ZVBpY2tlci5zYXR1cmRheScsXHJcbiAgICAnZGF0ZVBpY2tlci5zdW5kYXknXHJcbiAgXTtcclxuICBub3cgPSBuZXcgRGF0ZSgpO1xyXG4gIGRhdGVzOiBEYXRlW11bXSA9IFtdO1xyXG4gIHByaXZhdGUgX3VuU3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZW5kZXJlcjogUmVuZGVyZXIyLCBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHVibGljIGNvbmZpZ1NlcnZpY2U6IFhDb25maWdTZXJ2aWNlLCBwdWJsaWMgaTE4bjogWEkxOG5TZXJ2aWNlKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmkxOG4ubG9jYWxlQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuX3VuU3ViamVjdCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKSk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhzaW1wbGVzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBYSXNDaGFuZ2Uoc2ltcGxlcy5kaXNwbGF5KSAmJiB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0b3J5KCkge1xyXG4gICAgdGhpcy5fdW5TdWJqZWN0Lm5leHQoKTtcclxuICAgIHRoaXMuX3VuU3ViamVjdC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIHRoaXMuc2V0RGF5cyh0aGlzLmRpc3BsYXkpO1xyXG4gIH1cclxuXHJcbiAgc2V0RGF5cyhkYXRlOiBEYXRlKSB7XHJcbiAgICBsZXQgZGF0ZXM6IERhdGVbXSA9IFtdO1xyXG4gICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcclxuICAgIGNvbnN0IG1vbnRoID0gZGF0ZS5nZXRNb250aCgpO1xyXG4gICAgY29uc3QgZmlyc3QgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSk7XHJcbiAgICBjb25zdCBsYXN0ID0gbmV3IERhdGUoeWVhciwgbW9udGggKyAxLCAwKTtcclxuICAgIGNvbnN0IGxhc3REYXRlID0gbGFzdC5nZXREYXRlKCk7XHJcbiAgICBjb25zdCBmaXJzdERheSA9IGZpcnN0LmdldERheSgpO1xyXG4gICAgY29uc3QgbGFzdERheSA9IGxhc3QuZ2V0RGF5KCk7XHJcblxyXG4gICAgbGV0IGRheSA9IGZpcnN0RGF5O1xyXG4gICAgbGV0IGluZGV4ID0gMTtcclxuICAgIHdoaWxlIChkYXkgIT09IDEpIHtcclxuICAgICAgaW5kZXgtLTtcclxuICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgaW5kZXgpO1xyXG4gICAgICBkYXRlcyA9IFtkYXRlLCAuLi5kYXRlc107XHJcbiAgICAgIGRheSA9IGRhdGUuZ2V0RGF5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5kZXggPSAxO1xyXG4gICAgZG8ge1xyXG4gICAgICBkYXRlcyA9IFsuLi5kYXRlcywgbmV3IERhdGUoeWVhciwgbW9udGgsIGluZGV4KV07XHJcbiAgICAgIGluZGV4Kys7XHJcbiAgICB9IHdoaWxlIChpbmRleCA8PSBsYXN0RGF0ZSk7XHJcblxyXG4gICAgaW5kZXggPSAwO1xyXG4gICAgZGF5ID0gbGFzdERheTtcclxuICAgIHdoaWxlIChkYXkgIT09IDAgfHwgZGF0ZXMubGVuZ3RoICE9PSA3ICogNikge1xyXG4gICAgICBpbmRleCsrO1xyXG4gICAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoICsgMSwgaW5kZXgpO1xyXG4gICAgICBkYXRlcyA9IFsuLi5kYXRlcywgZGF0ZV07XHJcbiAgICAgIGRheSA9IGRhdGUuZ2V0RGF5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kYXRlcyA9IGNodW5rKGRhdGVzLCA3KTtcclxuXHJcbiAgICBpZiAodGhpcy5kYXRlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMucmFuZ2VDaGFuZ2UuZW1pdChbZGF0ZXNbMF0sIGRhdGVzW2RhdGVzLmxlbmd0aCAtIDFdXSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgZGF0ZUNsaWNrKGRhdGU6IERhdGUpIHtcclxuICAgIHRoaXMubW9kZWwgPSBkYXRlO1xyXG4gICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KGRhdGUpO1xyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICB0cmFja0J5Tm9kZShpbmRleDogbnVtYmVyLCBpdGVtOiBzdHJpbmcgfCBEYXRlKSB7XHJcbiAgICByZXR1cm4gaXRlbTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cIngtcGlja2VyLWRhdGVcIiBbY2xhc3MueC1kYXRlLXBpY2tlci1kYXRldGVtcF09XCJkYXRlVGVtcFwiPlxyXG4gIDx0YWJsZSBjbGFzcz1cIngtcGlja2VyLWRhdGUtdGFibGVcIiBjZWxsc3BhY2luZz1cIjBcIiBjZWxscGFkZGluZz1cIjBcIj5cclxuICAgIDx0aGVhZD5cclxuICAgICAgPHRyPlxyXG4gICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgdGl0bGUgb2YgdGl0bGVzOyB0cmFja0J5OiB0cmFja0J5Tm9kZVwiPnt7IHRpdGxlIHwgeEkxOG4gfX08L3RoPlxyXG4gICAgICA8L3RyPlxyXG4gICAgPC90aGVhZD5cclxuICAgIDx0Ym9keT5cclxuICAgICAgPHRyICpuZ0Zvcj1cImxldCB3ZWVrcyBvZiBkYXRlc1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHdlZWsgb2Ygd2Vla3M7IHRyYWNrQnk6IHRyYWNrQnlOb2RlXCI+XHJcbiAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgW2NsYXNzLngtZGF0ZS1sYXN0LW9yLW5leHRdPVwiKHdlZWsgfCBkYXRlOiAneXl5eU1NJykgIT09IChkaXNwbGF5IHwgZGF0ZTogJ3l5eXlNTScpXCJcclxuICAgICAgICAgICAgW2NsYXNzLngtZGF0ZS1ub3ddPVwiKHdlZWsgfCBkYXRlOiAneXl5eU1NZGQnKSA9PT0gKG5vdyB8IGRhdGU6ICd5eXl5TU1kZCcpXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImRhdGVUZW1wICYmIGRhdGVDbGljayh3ZWVrKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDx4LWJ1dHRvblxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWRhdGVUZW1wXCJcclxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgc2l6ZT1cIm1pbmlcIlxyXG4gICAgICAgICAgICAgIHRpdGxlPVwie3sgd2VlayB8IGRhdGU6ICd5eXl5LU1NLWRkJyB9fVwiXHJcbiAgICAgICAgICAgICAgW2FjdGl2YXRlZF09XCIod2VlayB8IGRhdGU6ICd5eXl5TU1kZCcpID09PSAobW9kZWwgfCBkYXRlOiAneXl5eU1NZGQnKVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRhdGVDbGljayh3ZWVrKVwiXHJcbiAgICAgICAgICAgICAgPnt7IHdlZWsgfCBkYXRlOiAnZCcgfX08L3gtYnV0dG9uXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGVUZW1wXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRhdGVUZW1wOyBjb250ZXh0OiB7IGRhdGUkOiB3ZWVrIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L3RyPlxyXG4gICAgPC90Ym9keT5cclxuICA8L3RhYmxlPlxyXG48L2Rpdj5cclxuIl19
135
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i1.DatePipe }, { type: i1.LowerCasePipe }, { type: i0.ChangeDetectorRef }, { type: i2.XConfigService }, { type: i3.XI18nService }]; } });
136
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlja2VyLWRhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvZGF0ZS1waWNrZXIvcGlja2VyLWRhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvZGF0ZS1waWNrZXIvcGlja2VyLWRhdGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsdUJBQXVCLEVBS3hCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFrQixNQUFNLGtCQUFrQixDQUFDO0FBQ3BFLE9BQU8sRUFBbUIsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9CLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7O0FBVTFELE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxtQkFBbUI7SUFlM0QsWUFDUyxRQUFtQixFQUNuQixRQUFrQixFQUNsQixhQUE0QixFQUM1QixHQUFzQixFQUN0QixhQUE2QixFQUM3QixJQUFrQjtRQUV6QixLQUFLLEVBQUUsQ0FBQztRQVBELGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixrQkFBYSxHQUFiLGFBQWEsQ0FBZ0I7UUFDN0IsU0FBSSxHQUFKLElBQUksQ0FBYztRQXBCM0IsV0FBTSxHQUFHO1lBQ1AsbUJBQW1CO1lBQ25CLG9CQUFv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b0JBQW9CO2tCQVJoQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxHQUFHLGlCQUFpQixFQUFFO29CQUNoQyxXQUFXLEVBQUUsOEJBQThCO29CQUMzQyxTQUFTLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQztvQkFDM0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBQ3JDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDO2lCQUNyQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIFJlbmRlcmVyMixcclxuICBPbkNoYW5nZXMsXHJcbiAgU2ltcGxlQ2hhbmdlc1xyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBjaHVuaywgWElzQ2hhbmdlLCBYQ29uZmlnU2VydmljZSB9IGZyb20gJ0BuZy1uZXN0L3VpL2NvcmUnO1xyXG5pbXBvcnQgeyBYRGF0ZVBpY2tlclR5cGUsIFhQaWNrZXJEYXRlUHJlZml4LCBYUGlja2VyRGF0ZVByb3BlcnR5IH0gZnJvbSAnLi9kYXRlLXBpY2tlci5wcm9wZXJ0eSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgWEkxOG5EYXRlUGlja2VyLCBYSTE4blNlcnZpY2UgfSBmcm9tICdAbmctbmVzdC91aS9pMThuJztcclxuaW1wb3J0IHsgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IERhdGVQaXBlLCBMb3dlckNhc2VQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBgJHtYUGlja2VyRGF0ZVByZWZpeH1gLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9waWNrZXItZGF0ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcGlja2VyLWRhdGUuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHByb3ZpZGVyczogW0RhdGVQaXBlLCBMb3dlckNhc2VQaXBlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgWFBpY2tlckRhdGVDb21wb25lbnQgZXh0ZW5kcyBYUGlja2VyRGF0ZVByb3BlcnR5IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcclxuICB0aXRsZXMgPSBbXHJcbiAgICAnZGF0ZVBpY2tlci5tb25kYXknLFxyXG4gICAgJ2RhdGVQaWNrZXIudHVlc2RheScsXHJcbiAgICAnZGF0ZVBpY2tlci53ZWRuZXNkYXknLFxyXG4gICAgJ2RhdGVQaWNrZXIudGh1cnNkYXknLFxyXG4gICAgJ2RhdGVQaWNrZXIuZnJpZGF5JyxcclxuICAgICdkYXRlUGlja2VyLnNhdHVyZGF5JyxcclxuICAgICdkYXRlUGlja2VyLnN1bmRheSdcclxuICBdO1xyXG4gIG5vdyA9IG5ldyBEYXRlKCk7XHJcbiAgZGF0ZXM6IERhdGVbXVtdID0gW107XHJcbiAgbG9jYWxlOiBYSTE4bkRhdGVQaWNrZXIgPSB7fTtcclxuICBwcml2YXRlIF91blN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHVibGljIGRhdGVQaXBlOiBEYXRlUGlwZSxcclxuICAgIHB1YmxpYyBsb3dlckNhc2VQaXBlOiBMb3dlckNhc2VQaXBlLFxyXG4gICAgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwdWJsaWMgY29uZmlnU2VydmljZTogWENvbmZpZ1NlcnZpY2UsXHJcbiAgICBwdWJsaWMgaTE4bjogWEkxOG5TZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmkxOG4ubG9jYWxlQ2hhbmdlXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgoeCkgPT4geC5kYXRlUGlja2VyIGFzIFhJMThuRGF0ZVBpY2tlciksXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX3VuU3ViamVjdClcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2NhbGUgPSB4O1xyXG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKHNpbXBsZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGNvbnN0IHsgZGlzcGxheSB9ID0gc2ltcGxlcztcclxuICAgIFhJc0NoYW5nZShkaXNwbGF5KSAmJiB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0b3J5KCkge1xyXG4gICAgdGhpcy5fdW5TdWJqZWN0Lm5leHQoKTtcclxuICAgIHRoaXMuX3VuU3ViamVjdC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIHRoaXMuc2V0RGF5cyh0aGlzLmRpc3BsYXkpO1xyXG4gIH1cclxuXHJcbiAgc2V0RGF5cyhkYXRlOiBEYXRlKSB7XHJcbiAgICBsZXQgZGF0ZXM6IERhdGVbXSA9IFtdO1xyXG4gICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcclxuICAgIGNvbnN0IG1vbnRoID0gZGF0ZS5nZXRNb250aCgpO1xyXG4gICAgY29uc3QgZmlyc3QgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSk7XHJcbiAgICBjb25zdCBsYXN0ID0gbmV3IERhdGUoeWVhciwgbW9udGggKyAxLCAwKTtcclxuICAgIGNvbnN0IGxhc3REYXRlID0gbGFzdC5nZXREYXRlKCk7XHJcbiAgICBjb25zdCBmaXJzdERheSA9IGZpcnN0LmdldERheSgpO1xyXG4gICAgY29uc3QgbGFzdERheSA9IGxhc3QuZ2V0RGF5KCk7XHJcblxyXG4gICAgbGV0IGRheSA9IGZpcnN0RGF5O1xyXG4gICAgbGV0IGluZGV4ID0gMTtcclxuICAgIHdoaWxlIChkYXkgIT09IDEpIHtcclxuICAgICAgaW5kZXgtLTtcclxuICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgaW5kZXgpO1xyXG4gICAgICBkYXRlcyA9IFtkYXRlLCAuLi5kYXRlc107XHJcbiAgICAgIGRheSA9IGRhdGUuZ2V0RGF5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5kZXggPSAxO1xyXG4gICAgZG8ge1xyXG4gICAgICBkYXRlcyA9IFsuLi5kYXRlcywgbmV3IERhdGUoeWVhciwgbW9udGgsIGluZGV4KV07XHJcbiAgICAgIGluZGV4Kys7XHJcbiAgICB9IHdoaWxlIChpbmRleCA8PSBsYXN0RGF0ZSk7XHJcblxyXG4gICAgaW5kZXggPSAwO1xyXG4gICAgZGF5ID0gbGFzdERheTtcclxuICAgIHdoaWxlIChkYXkgIT09IDAgfHwgZGF0ZXMubGVuZ3RoICE9PSA3ICogNikge1xyXG4gICAgICBpbmRleCsrO1xyXG4gICAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoICsgMSwgaW5kZXgpO1xyXG4gICAgICBkYXRlcyA9IFsuLi5kYXRlcywgZGF0ZV07XHJcbiAgICAgIGRheSA9IGRhdGUuZ2V0RGF5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kYXRlcyA9IGNodW5rKGRhdGVzLCA3KTtcclxuXHJcbiAgICBpZiAodGhpcy5kYXRlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMucmFuZ2VDaGFuZ2UuZW1pdChbZGF0ZXNbMF0sIGRhdGVzW2RhdGVzLmxlbmd0aCAtIDFdXSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgZGF0ZUNsaWNrKGRhdGU6IERhdGUpIHtcclxuICAgIHRoaXMubW9kZWwgPSBkYXRlO1xyXG4gICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KGRhdGUpO1xyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBnZXRMb2NhbGVNb250aChkYXRlOiBEYXRlKSB7XHJcbiAgICByZXR1cm4gKHRoaXMubG9jYWxlIGFzIGFueSlbdGhpcy5sb3dlckNhc2VQaXBlLnRyYW5zZm9ybSh0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCAnTExMTCcpIGFzIHN0cmluZyldO1xyXG4gIH1cclxuXHJcbiAgc2V0RGlzcGxheShkYXRlOiBEYXRlKSB7XHJcbiAgICB0aGlzLmRpc3BsYXkgPSBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgMSk7XHJcbiAgICB0aGlzLnNldERheXModGhpcy5kaXNwbGF5KTtcclxuICB9XHJcblxyXG4gIG5leHRNb250aChudW06IG51bWJlcikge1xyXG4gICAgbGV0IGRhdGUgPSBuZXcgRGF0ZSh0aGlzLmRpc3BsYXkpO1xyXG4gICAgZGF0ZS5zZXRNb250aChkYXRlLmdldE1vbnRoKCkgKyBudW0pO1xyXG4gICAgdGhpcy5zZXREaXNwbGF5KGRhdGUpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgbmV4dFllYXIobnVtOiBudW1iZXIpIHtcclxuICAgIGxldCBkYXRlID0gbmV3IERhdGUodGhpcy5kaXNwbGF5KTtcclxuICAgIGRhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpICsgbnVtKTtcclxuICAgIHRoaXMuc2V0RGlzcGxheShkYXRlKTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHR5cGVPbkNoYW5nZSh0eXBlOiBYRGF0ZVBpY2tlclR5cGUpIHtcclxuICAgIHRoaXMudHlwZSA9IHR5cGU7XHJcbiAgICB0aGlzLnR5cGVDaGFuZ2UuZW1pdCh0eXBlKTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHRyYWNrQnlOb2RlKF9pbmRleDogbnVtYmVyLCBpdGVtOiBzdHJpbmcgfCBEYXRlKSB7XHJcbiAgICByZXR1cm4gaXRlbTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cIngtcGlja2VyLWRhdGVcIiBbY2xhc3MueC1kYXRlLXBpY2tlci1kYXRldGVtcF09XCJkYXRlVGVtcFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJ4LXBpY2tlci1kYXRlLWhlYWRlclwiICpuZ0lmPVwic2hvd0hlYWRlclwiPlxyXG4gICAgPHgtYnV0dG9uIGljb249XCJmdG8tY2hldnJvbnMtbGVmdFwiIHNpemU9XCJzbWFsbFwiIG9ubHlJY29uIChjbGljayk9XCJuZXh0WWVhcigtMSlcIj48L3gtYnV0dG9uPlxyXG4gICAgPHgtYnV0dG9uIGljb249XCJmdG8tY2hldnJvbi1sZWZ0XCIgc2l6ZT1cInNtYWxsXCIgb25seUljb24gKGNsaWNrKT1cIm5leHRNb250aCgtMSlcIj48L3gtYnV0dG9uPlxyXG4gICAgPGRpdiBjbGFzcz1cIngtcGlja2VyLWRhdGUteWVhci1tb250aFwiPlxyXG4gICAgICA8eC1idXR0b24gdHlwZT1cInRleHRcIiBzaXplPVwic21hbGxcIiAoY2xpY2spPVwidHlwZU9uQ2hhbmdlKCd5ZWFyJylcIj57eyBkaXNwbGF5IHwgZGF0ZTogJ3l5eXknIH19e3sgbG9jYWxlLnllYXIgfX08L3gtYnV0dG9uPlxyXG4gICAgICA8eC1idXR0b24gdHlwZT1cInRleHRcIiBzaXplPVwic21hbGxcIiAoY2xpY2spPVwidHlwZU9uQ2hhbmdlKCdtb250aCcpXCI+e3sgZ2V0TG9jYWxlTW9udGgoZGlzcGxheSkgfX08L3gtYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8eC1idXR0b24gaWNvbj1cImZ0by1jaGV2cm9uLXJpZ2h0XCIgc2l6ZT1cInNtYWxsXCIgb25seUljb24gKGNsaWNrKT1cIm5leHRNb250aCgxKVwiPjwveC1idXR0b24+XHJcbiAgICA8eC1idXR0b24gaWNvbj1cImZ0by1jaGV2cm9ucy1yaWdodFwiIHNpemU9XCJzbWFsbFwiIG9ubHlJY29uIChjbGljayk9XCJuZXh0WWVhcigxKVwiPjwveC1idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIngtcGlja2VyLWRhdGUtYm9keVwiPlxyXG4gICAgPHRhYmxlIGNlbGxzcGFjaW5nPVwiMFwiIGNlbGxwYWRkaW5nPVwiMFwiPlxyXG4gICAgICA8dGhlYWQ+XHJcbiAgICAgICAgPHRyPlxyXG4gICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCB0aXRsZSBvZiB0aXRsZXM7IHRyYWNrQnk6IHRyYWNrQnlOb2RlXCI+e3sgdGl0bGUgfCB4STE4biB9fTwvdGg+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgPC90aGVhZD5cclxuICAgICAgPHRib2R5PlxyXG4gICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgd2Vla3Mgb2YgZGF0ZXNcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHdlZWsgb2Ygd2Vla3M7IHRyYWNrQnk6IHRyYWNrQnlOb2RlXCI+XHJcbiAgICAgICAgICAgIDx0ZFxyXG4gICAgICAgICAgICAgIFtjbGFzcy54LWRhdGUtbGFzdC1vci1uZXh0XT1cIih3ZWVrIHwgZGF0ZTogJ3l5eXlNTScpICE9PSAoZGlzcGxheSB8IGRhdGU6ICd5eXl5TU0nKVwiXHJcbiAgICAgICAgICAgICAgW2NsYXNzLngtZGF0ZS1ub3ddPVwiKHdlZWsgfCBkYXRlOiAneXl5eU1NZGQnKSA9PT0gKG5vdyB8IGRhdGU6ICd5eXl5TU1kZCcpXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiZGF0ZVRlbXAgJiYgZGF0ZUNsaWNrKHdlZWspXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDx4LWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhZGF0ZVRlbXBcIlxyXG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgc2l6ZT1cIm1pbmlcIlxyXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyB3ZWVrIHwgZGF0ZTogJ3l5eXktTU0tZGQnIH19XCJcclxuICAgICAgICAgICAgICAgIFthY3RpdmF0ZWRdPVwiIXJhbmdlUGlja2VyICYmICh3ZWVrIHwgZGF0ZTogJ3l5eXlNTWRkJykgPT09IChtb2RlbCB8IGRhdGU6ICd5eXl5TU1kZCcpXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJkYXRlQ2xpY2sod2VlaylcIlxyXG4gICAgICAgICAgICAgICAgPnt7IHdlZWsgfCBkYXRlOiAnZCcgfX08L3gtYnV0dG9uXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRlVGVtcFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRhdGVUZW1wOyBjb250ZXh0OiB7IGRhdGUkOiB3ZWVrIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgIDwvdGJvZHk+XHJcbiAgICA8L3RhYmxlPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19