@acorex/components 6.5.29 → 6.5.31

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 (364) hide show
  1. package/README.md +3 -3
  2. package/acorex-components.d.ts +5 -5
  3. package/esm2020/acorex-components.mjs +4 -4
  4. package/esm2020/lib/accordion/accordion.component.mjs +44 -44
  5. package/esm2020/lib/accordion/accordion.module.mjs +20 -20
  6. package/esm2020/lib/base/base-page.class.mjs +94 -94
  7. package/esm2020/lib/base/components.class.mjs +17 -17
  8. package/esm2020/lib/base/element.class.mjs +294 -294
  9. package/esm2020/lib/base/events.class.mjs +11 -11
  10. package/esm2020/lib/button/button.component.mjs +71 -71
  11. package/esm2020/lib/button/button.module.mjs +21 -21
  12. package/esm2020/lib/calendar/calendar-box/calendar-box.component.mjs +413 -413
  13. package/esm2020/lib/calendar/calendar-box/calendar-box.module.mjs +22 -22
  14. package/esm2020/lib/calendar/scheduler/scheduler-views.property.mjs +54 -54
  15. package/esm2020/lib/calendar/scheduler/scheduler.class.mjs +18 -18
  16. package/esm2020/lib/calendar/scheduler/scheduler.component.mjs +213 -213
  17. package/esm2020/lib/calendar/scheduler/scheduler.module.mjs +68 -68
  18. package/esm2020/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.mjs +132 -132
  19. package/esm2020/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.mjs +37 -37
  20. package/esm2020/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.mjs +47 -47
  21. package/esm2020/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.mjs +95 -95
  22. package/esm2020/lib/calendar/scheduler/views/month/scheduler-month-view.component.mjs +204 -204
  23. package/esm2020/lib/calendar/scheduler/views/scheduler-view.component.mjs +99 -99
  24. package/esm2020/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.mjs +77 -77
  25. package/esm2020/lib/checkbox/checkbox.component.mjs +98 -98
  26. package/esm2020/lib/checkbox/checkbox.module.mjs +20 -20
  27. package/esm2020/lib/color-picker/color-box/color-box.component.mjs +422 -422
  28. package/esm2020/lib/color-picker/color-picker.component.mjs +82 -82
  29. package/esm2020/lib/color-picker/color-picker.module.mjs +24 -24
  30. package/esm2020/lib/context-menu/context-menu.component.mjs +65 -65
  31. package/esm2020/lib/context-menu/context-menu.directive.mjs +135 -135
  32. package/esm2020/lib/context-menu/context-menu.module.mjs +20 -20
  33. package/esm2020/lib/data-filter/columns/filter-column-date.component.mjs +138 -138
  34. package/esm2020/lib/data-filter/columns/filter-column-number.component.mjs +117 -117
  35. package/esm2020/lib/data-filter/columns/filter-column-selection.component.mjs +74 -74
  36. package/esm2020/lib/data-filter/columns/filter-column-string.component.mjs +117 -117
  37. package/esm2020/lib/data-filter/filter-panel/filter-panel.component.mjs +258 -258
  38. package/esm2020/lib/data-filter/filter.class.mjs +44 -44
  39. package/esm2020/lib/data-filter/filter.module.mjs +90 -90
  40. package/esm2020/lib/data-filter/toolbar/filter-toolbar.component.mjs +166 -166
  41. package/esm2020/lib/data-list/core/data-list.component.mjs +40 -40
  42. package/esm2020/lib/data-list/list/list.component.mjs +124 -124
  43. package/esm2020/lib/data-list/list/list.module.mjs +22 -22
  44. package/esm2020/lib/data-list/list/toolbar-list-view.component.mjs +85 -85
  45. package/esm2020/lib/data-source/datasource.component.mjs +47 -47
  46. package/esm2020/lib/data-source/datasource.module.mjs +18 -18
  47. package/esm2020/lib/data-source/read-param.mjs +5 -5
  48. package/esm2020/lib/date-picker/date-picker.component.mjs +702 -702
  49. package/esm2020/lib/date-picker/date-picker.module.mjs +25 -25
  50. package/esm2020/lib/dialog/dialog.component.mjs +24 -24
  51. package/esm2020/lib/dialog/dialog.module.mjs +21 -21
  52. package/esm2020/lib/dialog/dialog.service.mjs +150 -150
  53. package/esm2020/lib/drawer/content.component.mjs +18 -18
  54. package/esm2020/lib/drawer/drawer-container.component.mjs +36 -36
  55. package/esm2020/lib/drawer/drawer.component.mjs +142 -142
  56. package/esm2020/lib/drawer/drawer.module.mjs +23 -23
  57. package/esm2020/lib/dropdown/dropdown.component.mjs +176 -176
  58. package/esm2020/lib/dropdown/dropdown.module.mjs +26 -26
  59. package/esm2020/lib/fieldset/fieldset.component.mjs +59 -59
  60. package/esm2020/lib/fieldset/fieldset.module.mjs +19 -19
  61. package/esm2020/lib/form-group/form-group.component.mjs +34 -34
  62. package/esm2020/lib/form-group/form-group.module.mjs +21 -21
  63. package/esm2020/lib/label/label.component.mjs +19 -19
  64. package/esm2020/lib/label/label.module.mjs +21 -21
  65. package/esm2020/lib/loading/loading-indicator.component.mjs +17 -17
  66. package/esm2020/lib/loading/loading-panel.component.mjs +44 -44
  67. package/esm2020/lib/loading/loading.module.mjs +21 -21
  68. package/esm2020/lib/loading/loading.service.mjs +45 -45
  69. package/esm2020/lib/menu/menu-item.component.mjs +47 -47
  70. package/esm2020/lib/menu/menu.component.mjs +86 -86
  71. package/esm2020/lib/menu/menu.module.mjs +22 -22
  72. package/esm2020/lib/menu/menu2.component.mjs +96 -96
  73. package/esm2020/lib/number-box/number-box.component.mjs +622 -622
  74. package/esm2020/lib/number-box/number-box.module.mjs +21 -21
  75. package/esm2020/lib/page/content.component.mjs +32 -32
  76. package/esm2020/lib/page/footer.component.mjs +19 -19
  77. package/esm2020/lib/page/page.component.mjs +53 -53
  78. package/esm2020/lib/page/page.module.mjs +22 -22
  79. package/esm2020/lib/panel-box/panel-box.component.mjs +88 -88
  80. package/esm2020/lib/panel-box/panel-box.module.mjs +19 -19
  81. package/esm2020/lib/password-box/password-box.component.mjs +31 -31
  82. package/esm2020/lib/password-box/password-box.module.mjs +23 -23
  83. package/esm2020/lib/popover/custom-cdk-overlay.service.mjs +48 -48
  84. package/esm2020/lib/popover/overlay.service.mjs +90 -90
  85. package/esm2020/lib/popover/popover.component.mjs +127 -127
  86. package/esm2020/lib/popover/popover.module.mjs +19 -19
  87. package/esm2020/lib/popup/popup.component.mjs +147 -147
  88. package/esm2020/lib/popup/popup.module.mjs +25 -25
  89. package/esm2020/lib/popup/popup.service.mjs +93 -93
  90. package/esm2020/lib/progress-bar/progress-bar.component.mjs +19 -19
  91. package/esm2020/lib/progress-bar/progress-bar.module.mjs +19 -19
  92. package/esm2020/lib/property-editor/editors/check-editor/check-editor.mjs +61 -61
  93. package/esm2020/lib/property-editor/editors/check-editor/check.module.mjs +22 -22
  94. package/esm2020/lib/property-editor/editors/color-editor/color.editor.mjs +38 -38
  95. package/esm2020/lib/property-editor/editors/color-editor/color.module.mjs +24 -24
  96. package/esm2020/lib/property-editor/editors/column-editor/column.editor.mjs +115 -115
  97. package/esm2020/lib/property-editor/editors/column-editor/column.module.mjs +32 -32
  98. package/esm2020/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.mjs +211 -211
  99. package/esm2020/lib/property-editor/editors/conditional-color-editor/conditional-color.module.mjs +78 -78
  100. package/esm2020/lib/property-editor/editors/date-editor/date.editor.mjs +51 -51
  101. package/esm2020/lib/property-editor/editors/date-editor/date.module.mjs +24 -24
  102. package/esm2020/lib/property-editor/editors/number-editor/number.editor.mjs +63 -63
  103. package/esm2020/lib/property-editor/editors/number-editor/number.module.mjs +24 -24
  104. package/esm2020/lib/property-editor/editors/range-editor/range.editor.mjs +140 -140
  105. package/esm2020/lib/property-editor/editors/range-editor/range.module.mjs +61 -61
  106. package/esm2020/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.mjs +72 -72
  107. package/esm2020/lib/property-editor/editors/selectbox-editor/selectbox.editor.mjs +71 -71
  108. package/esm2020/lib/property-editor/editors/selectbox-editor/selectbox.module.mjs +25 -25
  109. package/esm2020/lib/property-editor/editors/selection-editor/selection-editor.mjs +69 -69
  110. package/esm2020/lib/property-editor/editors/selection-editor/selection.module.mjs +22 -22
  111. package/esm2020/lib/property-editor/editors/switch-editor/number.editor.mjs +29 -29
  112. package/esm2020/lib/property-editor/editors/switch-editor/number.module.mjs +25 -25
  113. package/esm2020/lib/property-editor/editors/text-editor/text.editor.mjs +32 -32
  114. package/esm2020/lib/property-editor/editors/text-editor/text.module.mjs +24 -24
  115. package/esm2020/lib/property-editor/editors/textarea-editor/textarea.editor.mjs +32 -32
  116. package/esm2020/lib/property-editor/editors/textarea-editor/textarea.module.mjs +24 -24
  117. package/esm2020/lib/property-editor/editors/time-editor/time.editor.mjs +43 -43
  118. package/esm2020/lib/property-editor/editors/time-editor/time.module.mjs +24 -24
  119. package/esm2020/lib/property-editor/property-editor-renderer.directive.mjs +154 -154
  120. package/esm2020/lib/property-editor/property-editor.class.mjs +101 -101
  121. package/esm2020/lib/property-editor/property-editor.module.mjs +196 -196
  122. package/esm2020/lib/query-builder/query-builder-group.component.mjs +124 -124
  123. package/esm2020/lib/query-builder/query-builder-popup/query-builder-popup.component.mjs +171 -171
  124. package/esm2020/lib/query-builder/query-builder-rule.component.mjs +395 -395
  125. package/esm2020/lib/query-builder/query-builder.class.mjs +20 -20
  126. package/esm2020/lib/query-builder/query-builder.component.mjs +82 -82
  127. package/esm2020/lib/query-builder/query-builder.module.mjs +62 -62
  128. package/esm2020/lib/query-builder/query-builder.service.mjs +197 -197
  129. package/esm2020/lib/search-bar/search-bar.component.mjs +283 -283
  130. package/esm2020/lib/search-bar/search-bar.module.mjs +63 -63
  131. package/esm2020/lib/searchbox/searchbox.component.mjs +79 -79
  132. package/esm2020/lib/searchbox/searchbox.module.mjs +24 -24
  133. package/esm2020/lib/selectbox/selectbox.component.mjs +961 -961
  134. package/esm2020/lib/selectbox/selectbox.module.mjs +44 -44
  135. package/esm2020/lib/selectbox/selectbox2.component.mjs +574 -574
  136. package/esm2020/lib/selection-list/selection-list.component.mjs +108 -108
  137. package/esm2020/lib/selection-list/selection-list.module.mjs +21 -21
  138. package/esm2020/lib/switch/switch.component.mjs +51 -51
  139. package/esm2020/lib/switch/switch.module.mjs +20 -20
  140. package/esm2020/lib/tab-page/tab-page-Renderer.component.mjs +71 -71
  141. package/esm2020/lib/tab-page/tab-page-host.component.mjs +116 -116
  142. package/esm2020/lib/tab-page/tab-page.module.mjs +21 -21
  143. package/esm2020/lib/tab-page/tab-page.service.mjs +156 -156
  144. package/esm2020/lib/tab-strip/tab-strip.component.mjs +36 -36
  145. package/esm2020/lib/tab-strip/tab-strip.module.mjs +19 -19
  146. package/esm2020/lib/tab-view/dynamic-tabs.directive.mjs +24 -24
  147. package/esm2020/lib/tab-view/tab-view.component.mjs +105 -105
  148. package/esm2020/lib/tab-view/tab-view.module.mjs +21 -21
  149. package/esm2020/lib/tab-view/tab.component.mjs +30 -30
  150. package/esm2020/lib/textarea/textarea.component.mjs +26 -26
  151. package/esm2020/lib/textarea/textarea.module.mjs +21 -21
  152. package/esm2020/lib/textbox/textbox.component.mjs +39 -39
  153. package/esm2020/lib/textbox/textbox.module.mjs +24 -24
  154. package/esm2020/lib/time-picker/time-picker.component.mjs +943 -943
  155. package/esm2020/lib/time-picker/time-picker.module.mjs +22 -22
  156. package/esm2020/lib/toast/toast-message/toast-message.component.mjs +74 -74
  157. package/esm2020/lib/toast/toast-wrapper/toast-wrapper.component.mjs +13 -13
  158. package/esm2020/lib/toast/toast.module.mjs +21 -21
  159. package/esm2020/lib/toast/toast.service.mjs +44 -44
  160. package/esm2020/lib/toolbar/group-button/toolbar-group-button.component.mjs +78 -78
  161. package/esm2020/lib/toolbar/menu/toolbar-menu.component.mjs +57 -57
  162. package/esm2020/lib/toolbar/search/toolbar-search.component.mjs +54 -54
  163. package/esm2020/lib/toolbar/title/toolbar-title.component.mjs +47 -47
  164. package/esm2020/lib/toolbar/toolbar-item.mjs +6 -6
  165. package/esm2020/lib/toolbar/toolbar.component.mjs +13 -13
  166. package/esm2020/lib/toolbar/toolbar.module.mjs +40 -40
  167. package/esm2020/lib/tooltip/tooltip.directive.mjs +100 -100
  168. package/esm2020/lib/tooltip/tooltip.module.mjs +19 -19
  169. package/esm2020/lib/tree-side-menu/tree-side-menu.component.mjs +646 -646
  170. package/esm2020/lib/tree-side-menu/tree-side-menu.module.mjs +35 -35
  171. package/esm2020/lib/tree-view/tree-view.component.mjs +775 -775
  172. package/esm2020/lib/tree-view/tree-view.module.mjs +22 -22
  173. package/esm2020/lib/upload-file/upload-file.component.mjs +208 -208
  174. package/esm2020/lib/upload-file/upload-file.events.mjs +2 -2
  175. package/esm2020/lib/upload-file/upload-file.module.mjs +24 -24
  176. package/esm2020/lib/validation/validation-form.component.mjs +65 -65
  177. package/esm2020/lib/validation/validation-rule.widget.mjs +111 -111
  178. package/esm2020/lib/validation/validation.class.mjs +2 -2
  179. package/esm2020/lib/validation/validation.component.mjs +89 -89
  180. package/esm2020/lib/validation/validation.module.mjs +34 -34
  181. package/esm2020/public-api.mjs +158 -158
  182. package/fesm2015/acorex-components.mjs +15616 -15616
  183. package/fesm2015/acorex-components.mjs.map +1 -1
  184. package/fesm2020/acorex-components.mjs +15552 -15552
  185. package/fesm2020/acorex-components.mjs.map +1 -1
  186. package/lib/accordion/accordion.component.d.ts +13 -13
  187. package/lib/accordion/accordion.module.d.ts +9 -9
  188. package/lib/base/base-page.class.d.ts +46 -46
  189. package/lib/base/components.class.d.ts +10 -10
  190. package/lib/base/element.class.d.ts +106 -106
  191. package/lib/base/events.class.d.ts +18 -18
  192. package/lib/button/button.component.d.ts +21 -21
  193. package/lib/button/button.module.d.ts +8 -8
  194. package/lib/calendar/calendar-box/calendar-box.component.d.ts +81 -81
  195. package/lib/calendar/calendar-box/calendar-box.module.d.ts +11 -11
  196. package/lib/calendar/scheduler/scheduler-views.property.d.ts +19 -19
  197. package/lib/calendar/scheduler/scheduler.class.d.ts +36 -36
  198. package/lib/calendar/scheduler/scheduler.component.d.ts +39 -39
  199. package/lib/calendar/scheduler/scheduler.module.d.ts +21 -21
  200. package/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.d.ts +25 -25
  201. package/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.d.ts +14 -14
  202. package/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.d.ts +16 -16
  203. package/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.d.ts +26 -26
  204. package/lib/calendar/scheduler/views/month/scheduler-month-view.component.d.ts +37 -37
  205. package/lib/calendar/scheduler/views/scheduler-view.component.d.ts +28 -28
  206. package/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.d.ts +24 -24
  207. package/lib/checkbox/checkbox.component.d.ts +30 -30
  208. package/lib/checkbox/checkbox.module.d.ts +9 -9
  209. package/lib/color-picker/color-box/color-box.component.d.ts +25 -25
  210. package/lib/color-picker/color-picker.component.d.ts +30 -30
  211. package/lib/color-picker/color-picker.module.d.ts +13 -13
  212. package/lib/context-menu/context-menu.component.d.ts +22 -22
  213. package/lib/context-menu/context-menu.directive.d.ts +38 -38
  214. package/lib/context-menu/context-menu.module.d.ts +9 -9
  215. package/lib/data-filter/columns/filter-column-date.component.d.ts +22 -22
  216. package/lib/data-filter/columns/filter-column-number.component.d.ts +15 -15
  217. package/lib/data-filter/columns/filter-column-selection.component.d.ts +18 -18
  218. package/lib/data-filter/columns/filter-column-string.component.d.ts +15 -15
  219. package/lib/data-filter/filter-panel/filter-panel.component.d.ts +45 -45
  220. package/lib/data-filter/filter.class.d.ts +40 -40
  221. package/lib/data-filter/filter.module.d.ts +24 -24
  222. package/lib/data-filter/toolbar/filter-toolbar.component.d.ts +25 -25
  223. package/lib/data-list/core/data-list.component.d.ts +15 -15
  224. package/lib/data-list/list/list.component.d.ts +40 -40
  225. package/lib/data-list/list/list.module.d.ts +11 -11
  226. package/lib/data-list/list/toolbar-list-view.component.d.ts +17 -17
  227. package/lib/data-source/datasource.component.d.ts +16 -16
  228. package/lib/data-source/datasource.module.d.ts +7 -7
  229. package/lib/data-source/read-param.d.ts +40 -40
  230. package/lib/date-picker/date-picker.component.d.ts +81 -81
  231. package/lib/date-picker/date-picker.module.d.ts +14 -14
  232. package/lib/dialog/dialog.component.d.ts +14 -14
  233. package/lib/dialog/dialog.module.d.ts +10 -10
  234. package/lib/dialog/dialog.service.d.ts +36 -36
  235. package/lib/drawer/content.component.d.ts +7 -7
  236. package/lib/drawer/drawer-container.component.d.ts +10 -10
  237. package/lib/drawer/drawer.component.d.ts +34 -34
  238. package/lib/drawer/drawer.module.d.ts +10 -10
  239. package/lib/dropdown/dropdown.component.d.ts +38 -38
  240. package/lib/dropdown/dropdown.module.d.ts +13 -13
  241. package/lib/fieldset/fieldset.component.d.ts +11 -11
  242. package/lib/fieldset/fieldset.module.d.ts +8 -8
  243. package/lib/form-group/form-group.component.d.ts +14 -14
  244. package/lib/form-group/form-group.module.d.ts +8 -8
  245. package/lib/label/label.component.d.ts +9 -9
  246. package/lib/label/label.module.d.ts +8 -8
  247. package/lib/loading/loading-indicator.component.d.ts +9 -9
  248. package/lib/loading/loading-panel.component.d.ts +13 -13
  249. package/lib/loading/loading.module.d.ts +10 -10
  250. package/lib/loading/loading.service.d.ts +13 -13
  251. package/lib/menu/menu-item.component.d.ts +18 -18
  252. package/lib/menu/menu.component.d.ts +35 -35
  253. package/lib/menu/menu.module.d.ts +11 -11
  254. package/lib/menu/menu2.component.d.ts +21 -21
  255. package/lib/number-box/number-box.component.d.ts +52 -52
  256. package/lib/number-box/number-box.module.d.ts +10 -10
  257. package/lib/page/content.component.d.ts +8 -8
  258. package/lib/page/footer.component.d.ts +5 -5
  259. package/lib/page/page.component.d.ts +16 -16
  260. package/lib/page/page.module.d.ts +11 -11
  261. package/lib/panel-box/panel-box.component.d.ts +19 -19
  262. package/lib/panel-box/panel-box.module.d.ts +8 -8
  263. package/lib/password-box/password-box.component.d.ts +12 -12
  264. package/lib/password-box/password-box.module.d.ts +10 -10
  265. package/lib/popover/custom-cdk-overlay.service.d.ts +19 -19
  266. package/lib/popover/overlay.service.d.ts +31 -31
  267. package/lib/popover/popover.component.d.ts +34 -34
  268. package/lib/popover/popover.module.d.ts +8 -8
  269. package/lib/popup/popup.component.d.ts +40 -40
  270. package/lib/popup/popup.module.d.ts +13 -13
  271. package/lib/popup/popup.service.d.ts +22 -22
  272. package/lib/progress-bar/progress-bar.component.d.ts +7 -7
  273. package/lib/progress-bar/progress-bar.module.d.ts +8 -8
  274. package/lib/property-editor/editors/check-editor/check-editor.d.ts +19 -19
  275. package/lib/property-editor/editors/check-editor/check.module.d.ts +11 -11
  276. package/lib/property-editor/editors/color-editor/color.editor.d.ts +13 -13
  277. package/lib/property-editor/editors/color-editor/color.module.d.ts +12 -12
  278. package/lib/property-editor/editors/column-editor/column.editor.d.ts +34 -34
  279. package/lib/property-editor/editors/column-editor/column.module.d.ts +20 -20
  280. package/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.d.ts +44 -44
  281. package/lib/property-editor/editors/conditional-color-editor/conditional-color.module.d.ts +19 -19
  282. package/lib/property-editor/editors/date-editor/date.editor.d.ts +28 -28
  283. package/lib/property-editor/editors/date-editor/date.module.d.ts +12 -12
  284. package/lib/property-editor/editors/number-editor/number.editor.d.ts +20 -20
  285. package/lib/property-editor/editors/number-editor/number.module.d.ts +12 -12
  286. package/lib/property-editor/editors/range-editor/range.editor.d.ts +29 -29
  287. package/lib/property-editor/editors/range-editor/range.module.d.ts +18 -18
  288. package/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.d.ts +29 -29
  289. package/lib/property-editor/editors/selectbox-editor/selectbox.editor.d.ts +28 -28
  290. package/lib/property-editor/editors/selectbox-editor/selectbox.module.d.ts +14 -14
  291. package/lib/property-editor/editors/selection-editor/selection-editor.d.ts +25 -25
  292. package/lib/property-editor/editors/selection-editor/selection.module.d.ts +11 -11
  293. package/lib/property-editor/editors/switch-editor/number.editor.d.ts +11 -11
  294. package/lib/property-editor/editors/switch-editor/number.module.d.ts +13 -13
  295. package/lib/property-editor/editors/text-editor/text.editor.d.ts +18 -18
  296. package/lib/property-editor/editors/text-editor/text.module.d.ts +12 -12
  297. package/lib/property-editor/editors/textarea-editor/textarea.editor.d.ts +17 -17
  298. package/lib/property-editor/editors/textarea-editor/textarea.module.d.ts +12 -12
  299. package/lib/property-editor/editors/time-editor/time.editor.d.ts +17 -17
  300. package/lib/property-editor/editors/time-editor/time.module.d.ts +12 -12
  301. package/lib/property-editor/property-editor-renderer.directive.d.ts +30 -30
  302. package/lib/property-editor/property-editor.class.d.ts +92 -92
  303. package/lib/property-editor/property-editor.module.d.ts +21 -21
  304. package/lib/query-builder/query-builder-group.component.d.ts +33 -33
  305. package/lib/query-builder/query-builder-popup/query-builder-popup.component.d.ts +35 -35
  306. package/lib/query-builder/query-builder-rule.component.d.ts +45 -45
  307. package/lib/query-builder/query-builder.class.d.ts +45 -45
  308. package/lib/query-builder/query-builder.component.d.ts +27 -27
  309. package/lib/query-builder/query-builder.module.d.ts +23 -23
  310. package/lib/query-builder/query-builder.service.d.ts +18 -18
  311. package/lib/search-bar/search-bar.component.d.ts +61 -61
  312. package/lib/search-bar/search-bar.module.d.ts +18 -18
  313. package/lib/searchbox/searchbox.component.d.ts +22 -22
  314. package/lib/searchbox/searchbox.module.d.ts +13 -13
  315. package/lib/selectbox/selectbox.component.d.ts +118 -118
  316. package/lib/selectbox/selectbox.module.d.ts +15 -15
  317. package/lib/selectbox/selectbox2.component.d.ts +103 -103
  318. package/lib/selection-list/selection-list.component.d.ts +32 -32
  319. package/lib/selection-list/selection-list.module.d.ts +10 -10
  320. package/lib/switch/switch.component.d.ts +20 -20
  321. package/lib/switch/switch.module.d.ts +9 -9
  322. package/lib/tab-page/tab-page-Renderer.component.d.ts +16 -16
  323. package/lib/tab-page/tab-page-host.component.d.ts +25 -25
  324. package/lib/tab-page/tab-page.module.d.ts +10 -10
  325. package/lib/tab-page/tab-page.service.d.ts +30 -30
  326. package/lib/tab-strip/tab-strip.component.d.ts +28 -28
  327. package/lib/tab-strip/tab-strip.module.d.ts +8 -8
  328. package/lib/tab-view/dynamic-tabs.directive.d.ts +16 -16
  329. package/lib/tab-view/tab-view.component.d.ts +26 -26
  330. package/lib/tab-view/tab-view.module.d.ts +10 -10
  331. package/lib/tab-view/tab.component.d.ts +12 -12
  332. package/lib/textarea/textarea.component.d.ts +12 -12
  333. package/lib/textarea/textarea.module.d.ts +8 -8
  334. package/lib/textbox/textbox.component.d.ts +16 -16
  335. package/lib/textbox/textbox.module.d.ts +11 -11
  336. package/lib/time-picker/time-picker.component.d.ts +52 -52
  337. package/lib/time-picker/time-picker.module.d.ts +11 -11
  338. package/lib/toast/toast-message/toast-message.component.d.ts +18 -18
  339. package/lib/toast/toast-wrapper/toast-wrapper.component.d.ts +8 -8
  340. package/lib/toast/toast.module.d.ts +9 -9
  341. package/lib/toast/toast.service.d.ts +18 -18
  342. package/lib/toolbar/group-button/toolbar-group-button.component.d.ts +12 -12
  343. package/lib/toolbar/menu/toolbar-menu.component.d.ts +24 -24
  344. package/lib/toolbar/search/toolbar-search.component.d.ts +16 -16
  345. package/lib/toolbar/title/toolbar-title.component.d.ts +9 -9
  346. package/lib/toolbar/toolbar-item.d.ts +3 -3
  347. package/lib/toolbar/toolbar.component.d.ts +8 -8
  348. package/lib/toolbar/toolbar.module.d.ts +14 -14
  349. package/lib/tooltip/tooltip.directive.d.ts +21 -21
  350. package/lib/tooltip/tooltip.module.d.ts +8 -8
  351. package/lib/tree-side-menu/tree-side-menu.component.d.ts +111 -111
  352. package/lib/tree-side-menu/tree-side-menu.module.d.ts +11 -11
  353. package/lib/tree-view/tree-view.component.d.ts +121 -121
  354. package/lib/tree-view/tree-view.module.d.ts +11 -11
  355. package/lib/upload-file/upload-file.component.d.ts +42 -42
  356. package/lib/upload-file/upload-file.events.d.ts +10 -10
  357. package/lib/upload-file/upload-file.module.d.ts +13 -13
  358. package/lib/validation/validation-form.component.d.ts +19 -19
  359. package/lib/validation/validation-rule.widget.d.ts +23 -23
  360. package/lib/validation/validation.class.d.ts +16 -16
  361. package/lib/validation/validation.component.d.ts +25 -25
  362. package/lib/validation/validation.module.d.ts +11 -11
  363. package/package.json +1 -1
  364. package/public-api.d.ts +155 -155
@@ -1,943 +1,943 @@
1
- import { Component, ChangeDetectorRef, ElementRef, Input, ChangeDetectionStrategy, EventEmitter, Output } from '@angular/core';
2
- import { AXBaseTextComponent, AXValidatableComponent } from '../base/element.class';
3
- import { AXValueEvent } from '../base/events.class';
4
- import { AXTranslator } from '@acorex/core';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "../button/button.component";
7
- import * as i2 from "@angular/forms";
8
- import * as i3 from "angular2-text-mask";
9
- import * as i4 from "@angular/common";
10
- export class AXTimePickerItemChangedEvent {
11
- }
12
- export class AXTimePickerChangedEvent extends AXValueEvent {
13
- }
14
- export class AXTimePickerComponent extends AXBaseTextComponent {
15
- constructor(cdr, ref) {
16
- super(cdr, ref);
17
- this.cdr = cdr;
18
- this.onValueChanged = new EventEmitter();
19
- this.type = 'HHmm';
20
- this.showCurentTime = false;
21
- this.clearDisabled = true;
22
- this.HHmmss = [/[0-2]/, /[0-9]/, ':', /[0-5]/, /[0-9]/, ':', /[0-5]/, /[0-9]/];
23
- this.HHmm = [/[0-2]/, /[0-9]/, ':', /[0-5]/, /[0-9]/];
24
- this.HH = [/[0-2]/, /[0-9]/];
25
- this.hhmmss = [/[0-1]/, /[0-9]/, ':', /[0-5]/, /[0-9]/, ':', /[0-5]/, /[0-9]/];
26
- this.hhmm = [/[0-1]/, /[0-9]/, ':', /[0-5]/, /[0-9]/];
27
- this.hh = [/[0-1]/, /[0-9]/];
28
- // TODO: apply am pm from locale
29
- this.hhmmssam = [/[0-1]/, /[0-9]/, ':', /[0-5]/, /[0-9]/, ':', /[0-5]/, /[0-9]/, ' ', /[a|p|ق|ب]/, AXTranslator.get('dateTime.dayTime.m')];
30
- this.hhmmam = [/[0-1]/, /[0-9]/, ':', /[0-5]/, /[0-9]/, ' ', /[a|p|ق|ب]/, AXTranslator.get('dateTime.dayTime.m')];
31
- this.hham = [/[0-1]/, /[0-9]/, ' ', /[a|p|ق|ب]/, AXTranslator.get('dateTime.dayTime.m')];
32
- this.textValue = '';
33
- this.valueHam = '-- ' + AXTranslator.get('dateTime.dayTime.am');
34
- this.valueMam = '--:-- ' + AXTranslator.get('dateTime.dayTime.am');
35
- this.valueSam = '--:--:-- ' + AXTranslator.get('dateTime.dayTime.am');
36
- this.cursorPosition = 0;
37
- this.timeType = 'HHmm';
38
- }
39
- get value() {
40
- return this._values;
41
- }
42
- set value(v) {
43
- if (v === '' || v == null || v === '--:--:--' || v === '--:--' || v === '--' || v === this.valueSam || v === this.valueMam || v === this.valueHam) {
44
- this.clearDisabled = false;
45
- const old = this._values;
46
- switch (this.type) {
47
- case 'HHmmss':
48
- this.textValue = '--:--:--';
49
- break;
50
- case 'HHmm':
51
- this.textValue = '--:--';
52
- break;
53
- case 'HH':
54
- this.textValue = '--';
55
- break;
56
- case 'hhmmss':
57
- this.textValue = '--:--:--';
58
- break;
59
- case 'hhmm':
60
- this.textValue = '--:--';
61
- break;
62
- case 'hh':
63
- this.textValue = '--';
64
- break;
65
- case 'hhmmssam':
66
- this.textValue = this.valueSam;
67
- break;
68
- case 'hhmmam':
69
- this.textValue = this.valueMam;
70
- break;
71
- case 'hham':
72
- this.textValue = this.valueHam;
73
- break;
74
- }
75
- this._values = null;
76
- if (v !== old) {
77
- this.valueChange.emit(null);
78
- this.onValueChanged.emit({
79
- component: this,
80
- value: { hour: null, minute: null, second: null, time: null },
81
- oldValue: { time: old },
82
- htmlElement: this.ref.nativeElement
83
- });
84
- }
85
- }
86
- else {
87
- this.clearDisabled = true;
88
- if (this._values && v) {
89
- const old = this._values;
90
- const ind1 = v.charAt(0);
91
- const ind2 = v.charAt(1);
92
- const ind3 = v.charAt(2);
93
- const ind4 = v.charAt(3);
94
- const ind5 = v.charAt(4);
95
- const ind6 = v.charAt(5);
96
- const ind7 = v.charAt(6);
97
- const ind8 = v.charAt(7);
98
- const ind9 = v.charAt(8);
99
- const ind10 = v.charAt(9);
100
- const indOld4 = old.charAt(9);
101
- const indOld7 = old.charAt(9);
102
- const indOld10 = old.charAt(9);
103
- // handle hhmmssAm
104
- if (ind1 === '-' && ind2 !== '-' && this.timeType.mask === this.hhmmssam) {
105
- this.textValue = '0' + ind2 + ind3 + ind4 + ind5 + ind6 + ind7 + ind8 + ind9 + ind10 + AXTranslator.get('dateTime.dayTime.m');
106
- setTimeout(() => {
107
- this.setCaretPosition(this.input.nativeElement, 2);
108
- this.cursorPosition = 2;
109
- }, 0);
110
- }
111
- if (ind4 === '-' && ind5 !== '-' && this.timeType.mask === this.hhmmssam) {
112
- this.textValue = ind1 + ind2 + ind3 + '0' + ind5 + ind6 + ind7 + ind8 + ind9 + ind10 + AXTranslator.get('dateTime.dayTime.m');
113
- setTimeout(() => {
114
- this.setCaretPosition(this.input.nativeElement, 5);
115
- this.cursorPosition = 5;
116
- }, 0);
117
- }
118
- if (ind7 === '-' && ind8 !== '-' && this.timeType.mask === this.hhmmssam) {
119
- this.textValue = ind1 + ind2 + ind3 + ind4 + ind5 + ind6 + '0' + ind8 + ind9 + ind10 + AXTranslator.get('dateTime.dayTime.m');
120
- setTimeout(() => {
121
- this.setCaretPosition(this.input.nativeElement, 8);
122
- this.cursorPosition = 8;
123
- }, 0);
124
- }
125
- if (indOld10 === '-' && this.timeType.mask === this.hhmmssam) {
126
- this.textValue = ind1 + ind2 + ind3 + ind4 + ind5 + ind6 + ind7 + ind8 + ind9 + AXTranslator.get('dateTime.dayTime.am');
127
- }
128
- //
129
- if (ind1 === '-' && ind2 !== '-' && this.timeType.mask === this.hhmmam) {
130
- this.textValue = '0' + ind2 + ind3 + ind4 + ind5 + ind6 + ind7 + AXTranslator.get('dateTime.dayTime.m');
131
- setTimeout(() => {
132
- this.setCaretPosition(this.input.nativeElement, 2);
133
- this.cursorPosition = 2;
134
- }, 0);
135
- }
136
- if (ind4 === '-' && ind5 !== '-' && this.timeType.mask === this.hhmmam) {
137
- this.textValue = ind1 + ind2 + ind3 + '0' + ind5 + ind6 + ind7 + AXTranslator.get('dateTime.dayTime.m');
138
- setTimeout(() => {
139
- this.setCaretPosition(this.input.nativeElement, 5);
140
- this.cursorPosition = 5;
141
- }, 0);
142
- }
143
- if (indOld7 === '-' && this.timeType.mask === this.hhmmam) {
144
- this.textValue = ind1 + ind2 + ind3 + ind4 + ind5 + ind6 + AXTranslator.get('dateTime.dayTime.am');
145
- }
146
- //
147
- if (ind1 === '-' && ind2 !== '-' && this.timeType.mask === this.hham) {
148
- this.textValue = '0' + ind2 + ind3 + ind4 + AXTranslator.get('dateTime.dayTime.m');
149
- setTimeout(() => {
150
- this.setCaretPosition(this.input.nativeElement, 2);
151
- this.cursorPosition = 2;
152
- }, 0);
153
- }
154
- if (indOld4 === '-' && this.timeType.mask === this.hham) {
155
- this.textValue = ind1 + ind2 + ind3 + AXTranslator.get('dateTime.dayTime.am');
156
- }
157
- //
158
- if (ind1 === '-' && ind2 !== '-' && (this.timeType.mask === this.hhmmss || this.timeType.mask === this.HHmmss)) {
159
- this.textValue = '0' + ind2 + ind3 + ind4 + ind5 + ind6 + ind7 + ind8;
160
- setTimeout(() => {
161
- this.setCaretPosition(this.input.nativeElement, 2);
162
- this.cursorPosition = 2;
163
- }, 0);
164
- }
165
- if (ind4 === '-' && ind5 !== '-' && (this.timeType.mask === this.hhmmss || this.timeType.mask === this.HHmmss)) {
166
- this.textValue = ind1 + ind2 + ind3 + '0' + ind5 + ind6 + ind7 + ind8;
167
- setTimeout(() => {
168
- this.setCaretPosition(this.input.nativeElement, 6);
169
- this.cursorPosition = 6;
170
- }, 0);
171
- }
172
- if (ind7 === '-' && ind8 !== '-' && (this.timeType.mask === this.hhmmss || this.timeType.mask === this.HHmmss)) {
173
- this.textValue = ind1 + ind2 + ind3 + ind4 + ind5 + ind6 + '0' + ind8;
174
- setTimeout(() => {
175
- this.setCaretPosition(this.input.nativeElement, 9);
176
- this.cursorPosition = 9;
177
- }, 0);
178
- }
179
- //
180
- if (ind1 === '-' && ind2 !== '-' && (this.timeType.mask === this.hhmm || this.timeType.mask === this.HHmm)) {
181
- this.textValue = '0' + ind2 + ind3 + ind4 + ind5;
182
- setTimeout(() => {
183
- this.setCaretPosition(this.input.nativeElement, 2);
184
- this.cursorPosition = 2;
185
- }, 0);
186
- }
187
- if (ind4 === '-' && ind5 !== '-' && (this.timeType.mask === this.hhmm || this.timeType.mask === this.HHmm)) {
188
- this.textValue = ind1 + ind2 + ind3 + '0' + ind5;
189
- setTimeout(() => {
190
- this.setCaretPosition(this.input.nativeElement, 5);
191
- this.cursorPosition = 5;
192
- }, 0);
193
- }
194
- //
195
- if (ind1 === '-' && ind2 !== '-' && (this.timeType.mask === this.hh || this.timeType.mask === this.HH)) {
196
- this.textValue = '0' + ind2;
197
- setTimeout(() => {
198
- this.setCaretPosition(this.input.nativeElement, 2);
199
- this.cursorPosition = 2;
200
- }, 0);
201
- }
202
- }
203
- if (v !== this._values) {
204
- const old = this._values;
205
- this.textValue = v;
206
- this._values = (v && v.indexOf('-') === -1) ? v : null;
207
- if (v.indexOf('-') === -1) {
208
- this.valueChange.emit(v);
209
- this.onValueChanged.emit({
210
- component: this,
211
- value: {
212
- time: v,
213
- hour: Number(v[0] + v[1]),
214
- minute: v[3] && v[3] !== AXTranslator.get('dateTime.dayTime.a') && v[3] !== AXTranslator.get('dateTime.dayTime.p') ? Number(v[3] + v[4]) : null,
215
- second: v[6] && v[6] !== AXTranslator.get('dateTime.dayTime.a') && v[6] !== AXTranslator.get('dateTime.dayTime.p') ? Number(v[6] + v[7]) : null
216
- },
217
- oldValue: { time: old },
218
- htmlElement: this.ref.nativeElement
219
- });
220
- this.cdr.detectChanges();
221
- this.clearValidationStyle(this.input.nativeElement);
222
- }
223
- }
224
- }
225
- }
226
- clearValue() {
227
- this.clear();
228
- this.handleInputFocus();
229
- }
230
- ngOnInit() {
231
- switch (this.timeType) {
232
- case 'HHmmss':
233
- this.type = 'HHmmss';
234
- this.timeType = {
235
- guide: true,
236
- showMask: true,
237
- mask: this.HHmmss,
238
- keepCharPositions: true,
239
- placeholderChar: '-'
240
- };
241
- this.textValue = this.value ? this.value : '--:--:--';
242
- break;
243
- case 'HHmm':
244
- this.type = 'HHmm';
245
- this.timeType = {
246
- guide: true,
247
- showMask: true,
248
- mask: this.HHmm,
249
- keepCharPositions: true,
250
- placeholderChar: '-'
251
- };
252
- this.textValue = this.value ? this.value : '--:--';
253
- break;
254
- case 'HH':
255
- this.type = 'HH';
256
- this.timeType = {
257
- guide: true,
258
- showMask: true,
259
- mask: this.HH,
260
- keepCharPositions: true,
261
- placeholderChar: '-'
262
- };
263
- this.textValue = this.value ? this.value : '--';
264
- break;
265
- case 'hhmmss':
266
- this.type = 'hhmmss';
267
- this.timeType = {
268
- guide: true,
269
- showMask: true,
270
- mask: this.hhmmss,
271
- keepCharPositions: true,
272
- placeholderChar: '-'
273
- };
274
- this.textValue = this.value ? this.value : '--:--:--';
275
- break;
276
- case 'hhmm':
277
- this.type = 'hhmm';
278
- this.timeType = {
279
- guide: true,
280
- showMask: true,
281
- mask: this.hhmm,
282
- keepCharPositions: true,
283
- placeholderChar: '-'
284
- };
285
- this.textValue = this.value ? this.value : '--:--';
286
- break;
287
- case 'hh':
288
- this.type = 'hh';
289
- this.timeType = {
290
- guide: true,
291
- showMask: true,
292
- mask: this.hh,
293
- keepCharPositions: true,
294
- placeholderChar: '-'
295
- };
296
- this.textValue = this.value ? this.value : '--';
297
- break;
298
- case 'hhmmssam':
299
- this.type = 'hhmmssam';
300
- this.timeType = {
301
- guide: true,
302
- showMask: true,
303
- mask: this.hhmmssam,
304
- keepCharPositions: true,
305
- placeholderChar: '-'
306
- };
307
- this.textValue = this.value ? this.value : this.valueSam;
308
- break;
309
- case 'hhmmam':
310
- this.type = 'hhmmam';
311
- this.timeType = {
312
- guide: true,
313
- showMask: true,
314
- mask: this.hhmmam,
315
- keepCharPositions: true,
316
- placeholderChar: '-'
317
- };
318
- this.textValue = this.value ? this.value : this.valueMam;
319
- break;
320
- case 'hham':
321
- this.type = 'hham';
322
- this.timeType = {
323
- guide: true,
324
- showMask: true,
325
- mask: this.hham,
326
- keepCharPositions: true,
327
- placeholderChar: '-'
328
- };
329
- this.textValue = this.value ? this.value : this.valueHam;
330
- break;
331
- default:
332
- this.type = 'HHmm';
333
- this.timeType = {
334
- guide: true,
335
- showMask: true,
336
- mask: this.HHmm,
337
- keepCharPositions: true,
338
- placeholderChar: '-'
339
- };
340
- this.textValue = this.value ? this.value : '--:--';
341
- break;
342
- }
343
- if (this.showCurentTime === true) {
344
- const hour = new Date().getHours() > 10 ? new Date().getHours() : '0' + new Date().getHours();
345
- let amHour;
346
- if (new Date().getHours() > 10) {
347
- if (new Date().getHours() > 12) {
348
- if (new Date().getHours() - 12 < 10) {
349
- amHour = '0' + (new Date().getHours() - 12);
350
- }
351
- else {
352
- amHour = new Date().getHours();
353
- }
354
- }
355
- else {
356
- amHour = new Date().getHours();
357
- }
358
- }
359
- else {
360
- amHour = '0' + new Date().getHours();
361
- }
362
- const min = new Date().getMinutes() > 9 ? new Date().getMinutes() : '0' + new Date().getMinutes();
363
- const sec = new Date().getSeconds() > 9 ? new Date().getSeconds() : '0' + new Date().getSeconds();
364
- if (this.type === 'hh' || this.type === 'hhmm' || this.type === 'hhmmss' || this.type === 'hhmmssam') {
365
- if (hour >= 12) {
366
- this.value = amHour + ':' + min + ':' + sec + ' ' + AXTranslator.get('dateTime.dayTime.pm');
367
- }
368
- else {
369
- this.value = amHour + ':' + min + ':' + sec + ' ' + AXTranslator.get('dateTime.dayTime.am');
370
- }
371
- }
372
- else if (this.type === 'hham') {
373
- if (hour >= 12) {
374
- this.value = amHour + ' ' + AXTranslator.get('dateTime.dayTime.pm');
375
- }
376
- else {
377
- this.value = amHour + ' ' + AXTranslator.get('dateTime.dayTime.am');
378
- }
379
- }
380
- else if (this.type === 'hhmmam') {
381
- if (hour >= 12) {
382
- this.value = amHour + ':' + min + ' ' + AXTranslator.get('dateTime.dayTime.pm');
383
- }
384
- else {
385
- this.value = amHour + ':' + min + ' ' + AXTranslator.get('dateTime.dayTime.am');
386
- }
387
- }
388
- else {
389
- this.value = hour + ':' + min + ':' + sec;
390
- }
391
- }
392
- }
393
- onStartfocus() {
394
- this.input.nativeElement.style.caretColor = 'transparent';
395
- setTimeout(() => {
396
- this.setCaretPosition(this.input.nativeElement, 0);
397
- this.cursorPosition = 0;
398
- this.input.nativeElement.style.caretColor = 'auto';
399
- }, 0);
400
- }
401
- handleInputFocus() {
402
- this.onStartfocus();
403
- this.input.nativeElement.focus();
404
- }
405
- handleInputBlur(e) {
406
- if (this.textValue.indexOf('-') !== -1) {
407
- switch (this.type) {
408
- case 'HHmmss':
409
- this.textValue = '--:--:--';
410
- break;
411
- case 'HHmm':
412
- this.textValue = '--:--';
413
- break;
414
- case 'HH':
415
- this.textValue = '--';
416
- break;
417
- case 'hhmmss':
418
- this.textValue = '--:--:--';
419
- break;
420
- case 'hhmm':
421
- this.textValue = '--:--';
422
- break;
423
- case 'hh':
424
- this.textValue = '--';
425
- break;
426
- case 'hhmmssam':
427
- this.textValue = this.valueSam;
428
- break;
429
- case 'hhmmam':
430
- this.textValue = this.valueMam;
431
- break;
432
- case 'hham':
433
- this.textValue = this.valueHam;
434
- break;
435
- }
436
- }
437
- }
438
- handleKeyPress(event) {
439
- const inputChar = String.fromCharCode(event.charCode);
440
- const firstChar = this.textValue.charAt(0);
441
- const secondChar = this.textValue.charAt(1);
442
- setTimeout(() => {
443
- if (this.input.nativeElement.selectionStart || this.input.nativeElement.selectionStart === 0) {
444
- this.cursorPosition = this.input.nativeElement.selectionStart;
445
- // this.cursorPosition += 1 ;
446
- }
447
- }, 0);
448
- if (firstChar === '2') {
449
- if (secondChar === '' || this.textValue.charAt(1) >= '4' || this.cursorPosition < 3) {
450
- if (inputChar >= '4') {
451
- event.preventDefault();
452
- }
453
- }
454
- }
455
- if (this.timeType.mask === this.hhmmss ||
456
- this.timeType.mask === this.hhmm ||
457
- this.timeType.mask === this.hh ||
458
- this.timeType.mask === this.hhmmssam ||
459
- this.timeType.mask === this.hhmmam ||
460
- this.timeType.mask === this.hham) {
461
- if (firstChar === '1') {
462
- if (secondChar === '' || this.textValue.charAt(1) >= '3' || this.cursorPosition < 3) {
463
- if (inputChar >= '3') {
464
- event.preventDefault();
465
- }
466
- }
467
- }
468
- }
469
- if (inputChar === '-') {
470
- event.preventDefault();
471
- }
472
- }
473
- handleKeyUp(event) {
474
- if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
475
- this.input.nativeElement.style.caretColor = 'auto';
476
- event.preventDefault();
477
- event.stopPropagation();
478
- }
479
- // up & down button
480
- if (event.key === 'ArrowUp') {
481
- this.setCaret();
482
- }
483
- if (event.key === 'ArrowDown') {
484
- this.setCaret();
485
- }
486
- if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
487
- event.preventDefault();
488
- return false;
489
- }
490
- // left & right Button
491
- if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {
492
- if (this.input.nativeElement.selectionStart || this.input.nativeElement.selectionStart === 0) {
493
- this.cursorPosition = this.input.nativeElement.selectionStart;
494
- }
495
- }
496
- // home button
497
- if (event.key === 'Home') {
498
- this.cursorPosition = 0;
499
- }
500
- // end button
501
- if (event.key === 'End') {
502
- if (this.timeType.mask === this.hhmmssam || this.timeType.mask === this.hhmmam || this.timeType.mask === this.hham) {
503
- if (this.timeType.mask === this.hhmmssam) {
504
- this.cursorPosition = 9;
505
- setTimeout(() => {
506
- this.setCaretPosition(this.input.nativeElement, this.cursorPosition);
507
- this.input.nativeElement.style.caretColor = 'auto';
508
- }, 0);
509
- }
510
- if (this.timeType.mask === this.hhmmam) {
511
- this.cursorPosition = 6;
512
- setTimeout(() => {
513
- this.setCaretPosition(this.input.nativeElement, this.cursorPosition);
514
- this.input.nativeElement.style.caretColor = 'auto';
515
- }, 0);
516
- }
517
- if (this.timeType.mask === this.hham) {
518
- this.cursorPosition = 3;
519
- setTimeout(() => {
520
- this.setCaretPosition(this.input.nativeElement, this.cursorPosition);
521
- this.input.nativeElement.style.caretColor = 'auto';
522
- }, 0);
523
- }
524
- }
525
- else {
526
- this.cursorPosition = this.textValue.length;
527
- }
528
- }
529
- // backspace Control
530
- if (event.key === 'Backspace') {
531
- const ind1 = this.textValue.charAt(0);
532
- const ind2 = this.textValue.charAt(1);
533
- const ind3 = this.textValue.charAt(2);
534
- const ind4 = this.textValue.charAt(3);
535
- const ind5 = this.textValue.charAt(4);
536
- const ind6 = this.textValue.charAt(5);
537
- const ind7 = this.textValue.charAt(6);
538
- const ind8 = this.textValue.charAt(7);
539
- const ind9 = this.textValue.charAt(8);
540
- const ind10 = this.textValue.charAt(9);
541
- if (this.timeType.mask === this.hhmmssam) {
542
- if (ind10 === '-') {
543
- this.textValue = ind1 + ind2 + ind3 + ind4 + ind5 + ind6 + ind7 + ind8 + ind9 + AXTranslator.get('dateTime.dayTime.am');
544
- setTimeout(() => {
545
- this.setCaretPosition(this.input.nativeElement, 0);
546
- this.cursorPosition = 0;
547
- }, 0);
548
- }
549
- }
550
- if (this.timeType.mask === this.hhmmam) {
551
- if (ind7 === '-') {
552
- this.textValue = ind1 + ind2 + ind3 + ind4 + ind5 + ind6 + AXTranslator.get('dateTime.dayTime.am');
553
- setTimeout(() => {
554
- this.setCaretPosition(this.input.nativeElement, 0);
555
- this.cursorPosition = 0;
556
- }, 0);
557
- }
558
- }
559
- if (this.timeType.mask === this.hham) {
560
- if (ind4 === '-') {
561
- this.textValue = ind1 + ind2 + ind3 + AXTranslator.get('dateTime.dayTime.am');
562
- setTimeout(() => {
563
- this.setCaretPosition(this.input.nativeElement, 0);
564
- this.cursorPosition = 0;
565
- }, 0);
566
- }
567
- }
568
- if (this.textValue.length <= 0) {
569
- this.cursorPosition = 0;
570
- }
571
- else {
572
- this.cursorPosition -= 1;
573
- }
574
- }
575
- }
576
- handleKeyDown(event) {
577
- if (event.key === 'End') {
578
- if (this.timeType.mask === this.hhmmssam || this.timeType.mask === this.hhmmam || this.timeType.mask === this.hham) {
579
- this.input.nativeElement.style.caretColor = 'transparent';
580
- }
581
- else {
582
- this.input.nativeElement.style.caretColor = 'auto';
583
- }
584
- }
585
- let newValue = this.textValue;
586
- const ind1 = newValue.charAt(0);
587
- const ind2 = newValue.charAt(1);
588
- const ind3 = this.textValue.charAt(2);
589
- const ind4 = this.textValue.charAt(3);
590
- const ind5 = this.textValue.charAt(4);
591
- const ind6 = this.textValue.charAt(5);
592
- const ind7 = this.textValue.charAt(6);
593
- const ind8 = this.textValue.charAt(7);
594
- const ind9 = this.textValue.charAt(8);
595
- const ind10 = this.textValue.charAt(9);
596
- const ind11 = this.textValue.charAt(10);
597
- // up key
598
- if (event.key === 'ArrowUp') {
599
- // hour
600
- if (this.cursorPosition <= 2) {
601
- const hourind = ind1 + ind2;
602
- const newHour = +hourind + 1;
603
- newValue = newHour.toString();
604
- if (this.timeType.mask === this.hhmmss ||
605
- this.timeType.mask === this.hhmm ||
606
- this.timeType.mask === this.hh ||
607
- this.timeType.mask === this.hhmmssam ||
608
- this.timeType.mask === this.hhmmam ||
609
- this.timeType.mask === this.hham) {
610
- if (hourind === '--') {
611
- newValue = '0';
612
- }
613
- if (ind1 !== '-' && hourind === ind1 + '-') {
614
- newValue = '0';
615
- }
616
- if (ind2 !== '-' && hourind === '-' + ind2) {
617
- newValue = '0';
618
- }
619
- if (+newValue > 12) {
620
- newValue = '01';
621
- }
622
- else if (+newValue < 10) {
623
- newValue = '0' + newValue;
624
- }
625
- }
626
- else {
627
- if (hourind === '--') {
628
- newValue = '0';
629
- }
630
- if (ind1 !== '-' && hourind === ind1 + '-') {
631
- newValue = '0';
632
- }
633
- if (ind2 !== '-' && hourind === '-' + ind2) {
634
- newValue = '0';
635
- }
636
- if (+newValue > 23) {
637
- newValue = '00';
638
- }
639
- else if (+newValue < 10) {
640
- newValue = '0' + newValue;
641
- }
642
- }
643
- const afterHourind = ind3 + ind4 + ind5 + ind6 + ind7 + ind8 + ind9 + ind10 + ind11;
644
- const hour = newValue.toString() + afterHourind;
645
- this.textValue = hour;
646
- }
647
- // minute
648
- if (this.cursorPosition >= 3 && this.cursorPosition <= 5) {
649
- const hourind = ind4 + ind5;
650
- const newHour = +hourind + 1;
651
- newValue = newHour.toString();
652
- if (hourind === '--') {
653
- newValue = '0';
654
- }
655
- if (ind4 !== '-' && hourind === ind4 + '-') {
656
- newValue = '0';
657
- }
658
- if (ind5 !== '-' && hourind === '-' + ind5) {
659
- newValue = '0';
660
- }
661
- if (+newValue > 59) {
662
- newValue = '00';
663
- }
664
- else if (+newValue < 10) {
665
- newValue = '0' + newValue;
666
- }
667
- const beforeHourind = ind1 + ind2 + ind3;
668
- const afterHourind = ind6 + ind7 + ind8 + ind9 + ind10 + ind11;
669
- const minute = beforeHourind + newValue.toString() + afterHourind;
670
- this.textValue = minute;
671
- }
672
- // second
673
- if (this.cursorPosition >= 6 && this.cursorPosition <= 8) {
674
- const secondind = ind7 + ind8;
675
- const newSecond = +secondind + 1;
676
- newValue = newSecond.toString();
677
- if (secondind === '--') {
678
- newValue = '0';
679
- }
680
- if (ind7 !== '-' && secondind === ind7 + '-') {
681
- newValue = '0';
682
- }
683
- if (ind8 !== '-' && secondind === '-' + ind8) {
684
- newValue = '0';
685
- }
686
- if (+newValue > 59) {
687
- newValue = '00';
688
- }
689
- else if (+newValue < 10) {
690
- newValue = '0' + newValue;
691
- }
692
- const beforeHourind = ind1 + ind2 + ind3 + ind4 + ind5 + ind6;
693
- const afterHourind = ind9 + ind10 + ind11;
694
- const second = beforeHourind + newValue.toString() + afterHourind;
695
- this.textValue = second;
696
- }
697
- // type am/PM
698
- if (this.timeType.mask === this.hhmmssam) {
699
- if (this.cursorPosition > 8) {
700
- let typeind = ind10.toString();
701
- const beforeHourind = ind1 + ind2 + ind3 + ind4 + ind5 + ind6 + ind7 + ind8 + ind9;
702
- const afterHourind = ind11;
703
- if (ind10 === AXTranslator.get('dateTime.dayTime.p')) {
704
- typeind = AXTranslator.get('dateTime.dayTime.a');
705
- }
706
- else if (ind10 === AXTranslator.get('dateTime.dayTime.a')) {
707
- typeind = AXTranslator.get('dateTime.dayTime.p');
708
- }
709
- this.textValue = beforeHourind + typeind + afterHourind;
710
- }
711
- }
712
- if (this.timeType.mask === this.hhmmam) {
713
- if (this.cursorPosition >= 6) {
714
- let typeind = ind7.toString();
715
- const beforeHourind = ind1 + ind2 + ind3 + ind4 + ind5 + ind6;
716
- const afterHourind = ind8;
717
- if (ind7 === AXTranslator.get('dateTime.dayTime.p')) {
718
- typeind = AXTranslator.get('dateTime.dayTime.a');
719
- }
720
- else if (ind7 === AXTranslator.get('dateTime.dayTime.a')) {
721
- typeind = AXTranslator.get('dateTime.dayTime.p');
722
- }
723
- this.textValue = beforeHourind + typeind + afterHourind;
724
- }
725
- }
726
- if (this.timeType.mask === this.hham) {
727
- if (this.cursorPosition >= 3) {
728
- let typeind2 = ind4.toString();
729
- const beforeHourind = ind1 + ind2 + ind3;
730
- const afterHourind = ind5;
731
- if (ind4 === AXTranslator.get('dateTime.dayTime.p')) {
732
- typeind2 = AXTranslator.get('dateTime.dayTime.a');
733
- }
734
- else if (ind4 === AXTranslator.get('dateTime.dayTime.a')) {
735
- typeind2 = AXTranslator.get('dateTime.dayTime.p');
736
- }
737
- this.textValue = beforeHourind + typeind2 + afterHourind;
738
- }
739
- }
740
- }
741
- // key down
742
- if (event.key === 'ArrowDown') {
743
- // hour
744
- if (this.cursorPosition <= 2) {
745
- const hourind = ind1 + ind2;
746
- const newHour = +hourind - 1;
747
- newValue = newHour.toString();
748
- if (this.timeType.mask === this.hhmmss ||
749
- this.timeType.mask === this.hhmm ||
750
- this.timeType.mask === this.hh ||
751
- this.timeType.mask === this.hhmmssam ||
752
- this.timeType.mask === this.hhmmam ||
753
- this.timeType.mask === this.hham) {
754
- if (hourind === '--') {
755
- newValue = '0';
756
- }
757
- if (ind1 !== '-' && hourind === ind1 + '-') {
758
- newValue = '0';
759
- }
760
- if (ind2 !== '-' && hourind === '-' + ind2) {
761
- newValue = '0';
762
- }
763
- if (+newValue < 1) {
764
- newValue = '12';
765
- }
766
- else if (+newValue < 10) {
767
- newValue = '0' + newValue;
768
- }
769
- }
770
- else {
771
- if (hourind === '--') {
772
- newValue = '0';
773
- }
774
- if (ind1 !== '-' && hourind === ind1 + '-') {
775
- newValue = '0';
776
- }
777
- if (ind2 !== '-' && hourind === '-' + ind2) {
778
- newValue = '0';
779
- }
780
- if (+newValue < 0) {
781
- newValue = '23';
782
- }
783
- else if (+newValue < 10) {
784
- newValue = '0' + newValue;
785
- }
786
- }
787
- const afterHourIndex = ind3 + ind4 + ind5 + ind6 + ind7 + ind8 + ind9 + ind10 + ind11;
788
- const hour = newValue.toString() + afterHourIndex;
789
- this.textValue = hour;
790
- }
791
- // minute
792
- if (this.cursorPosition >= 3 && this.cursorPosition <= 5) {
793
- const minuteind = ind4 + ind5;
794
- const newMinute = +minuteind - 1;
795
- newValue = newMinute.toString();
796
- if (minuteind === '--') {
797
- newValue = '0';
798
- }
799
- if (ind4 !== '-' && minuteind === ind4 + '-') {
800
- newValue = '0';
801
- }
802
- if (ind5 !== '-' && minuteind === '-' + ind5) {
803
- newValue = '0';
804
- }
805
- if (minuteind === '--') {
806
- newValue = '0';
807
- }
808
- if (+newValue < 0) {
809
- newValue = '59';
810
- }
811
- else if (+newValue < 10) {
812
- newValue = '0' + newValue;
813
- }
814
- const beforeMinuteIndex = ind1 + ind2 + ind3;
815
- const afterMinuteIndex = ind6 + ind7 + ind8 + ind9 + ind10 + ind11;
816
- const minute = beforeMinuteIndex + newValue.toString() + afterMinuteIndex;
817
- this.textValue = minute;
818
- }
819
- // second
820
- if (this.cursorPosition >= 6 && this.cursorPosition <= 8) {
821
- const secondIndex = ind7 + ind8;
822
- const newSecond = +secondIndex - 1;
823
- newValue = newSecond.toString();
824
- if (secondIndex === '--') {
825
- newValue = '0';
826
- }
827
- if (ind7 !== '-' && secondIndex === ind7 + '-') {
828
- newValue = '0';
829
- }
830
- if (ind8 !== '-' && secondIndex === '-' + ind8) {
831
- newValue = '0';
832
- }
833
- if (secondIndex === '--') {
834
- newValue = '0';
835
- }
836
- if (+newValue < 0) {
837
- newValue = '59';
838
- }
839
- else if (+newValue < 10) {
840
- newValue = '0' + newValue;
841
- }
842
- const beforesecondIndex = ind1 + ind2 + ind3 + ind4 + ind5 + ind6;
843
- const aftersecondIndex = ind9 + ind10 + ind11;
844
- const second = beforesecondIndex + newValue.toString() + aftersecondIndex;
845
- this.textValue = second;
846
- }
847
- // type
848
- if (this.timeType.mask === this.hhmmssam) {
849
- if (this.cursorPosition > 8) {
850
- let typeind = ind10.toString();
851
- const beforeHourind = ind1 + ind2 + ind3 + ind4 + ind5 + ind6 + ind7 + ind8 + ind9;
852
- const afterHourind = ind11;
853
- if (ind10 === AXTranslator.get('dateTime.dayTime.p')) {
854
- typeind = AXTranslator.get('dateTime.dayTime.a');
855
- }
856
- else if (ind10 === AXTranslator.get('dateTime.dayTime.a')) {
857
- typeind = AXTranslator.get('dateTime.dayTime.p');
858
- }
859
- this.textValue = beforeHourind + typeind + afterHourind;
860
- }
861
- }
862
- if (this.timeType.mask === this.hhmmam) {
863
- if (this.cursorPosition >= 6) {
864
- let typeind = ind7.toString();
865
- const beforeHourind = ind1 + ind2 + ind3 + ind4 + ind5 + ind6;
866
- const afterHourind = ind8;
867
- if (ind7 === AXTranslator.get('dateTime.dayTime.p')) {
868
- typeind = AXTranslator.get('dateTime.dayTime.a');
869
- }
870
- else if (ind7 === AXTranslator.get('dateTime.dayTime.a')) {
871
- typeind = AXTranslator.get('dateTime.dayTime.p');
872
- }
873
- this.textValue = beforeHourind + typeind + afterHourind;
874
- }
875
- }
876
- if (this.timeType.mask === this.hham) {
877
- if (this.cursorPosition >= 3) {
878
- let typeind2 = ind4.toString();
879
- const beforeHourind = ind1 + ind2 + ind3;
880
- const afterHourind = ind5;
881
- //TO DO this is wrong check index
882
- if (ind4 === AXTranslator.get('dateTime.dayTime.p')) {
883
- typeind2 = AXTranslator.get('dateTime.dayTime.a');
884
- }
885
- else if (ind4 === AXTranslator.get('dateTime.dayTime.a')) {
886
- typeind2 = AXTranslator.get('dateTime.dayTime.p');
887
- }
888
- this.textValue = beforeHourind + typeind2 + afterHourind;
889
- }
890
- }
891
- }
892
- if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
893
- this.input.nativeElement.style.caretColor = 'transparent';
894
- event.preventDefault();
895
- event.stopPropagation();
896
- return false;
897
- }
898
- if (event.key === 'Delete') {
899
- event.preventDefault();
900
- }
901
- }
902
- handleClick(event) {
903
- if (this.input.nativeElement.selectionStart || this.input.nativeElement.selectionStart === 0) {
904
- this.cursorPosition = this.input.nativeElement.selectionStart;
905
- }
906
- }
907
- doGetCaretPosition(ctrl) {
908
- let CaretPos = 0;
909
- if (ctrl.selectionStart || ctrl.selectionStart === 0) {
910
- CaretPos = ctrl.selectionStart;
911
- return CaretPos;
912
- }
913
- }
914
- setCaretPosition(ctrl, pos) {
915
- if (ctrl.setSelectionRange) {
916
- ctrl.focus();
917
- ctrl.setSelectionRange(pos, pos);
918
- }
919
- else if (ctrl.createTextRange) {
920
- const range = ctrl.createTextRange();
921
- range.collapse(true);
922
- range.moveEnd('character', pos);
923
- range.moveStart('character', pos);
924
- range.select();
925
- }
926
- }
927
- setCaret() {
928
- this.setCaretPosition(this.input.nativeElement, this.cursorPosition);
929
- }
930
- }
931
- AXTimePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AXTimePickerComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
932
- AXTimePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: AXTimePickerComponent, selector: "ax-time-picker", inputs: { timeType: "timeType", showCurentTime: "showCurentTime" }, outputs: { onValueChanged: "onValueChanged" }, host: { styleAttribute: "width: 100%" }, providers: [{ provide: AXValidatableComponent, useExisting: AXTimePickerComponent }], usesInheritance: true, ngImport: i0, template: "<div class=\"ax form-item\" [class.disabled]=\"disabled\" [attr.id]=\"uid\" #fc>\r\n <div class=\"ax items-wrapper\">\r\n <ng-content select=\"[start]\">\r\n </ng-content>\r\n </div>\r\n <div class=\"content\" #content>\r\n <div class=\"ax form-control input {{size}}\" [class.disabled]=\"disabled\" [class.readonly]=\"readonly\" [class.icon]=\"icon\">\r\n <input #input type=\"text\" class=\"ax {{size}}\" [textMask]=\"timeType\" [(ngModel)]=\"textValue\" placeholder=\"{{placeholder}}\" [readonly]=\"readonly\" [disabled]=\"disabled\" [ngClass]=\"setTextAlign()\" [class.clear]=\"value && allowClear\" (focus)=\"handleInputFocus()\"\r\n (blur)=\"handleInputBlur($event)\" (keypress)='handleKeyPress($event)' (keyup)=\"handleKeyUp($event)\" (keydown)=\"handleKeyDown($event)\" (click)=\"handleClick($event)\">\r\n <i class=\"{{icon}}\" *ngIf=\"icon\"></i>\r\n </div>\r\n </div>\r\n <div class=\"ax items-wrapper\">\r\n <ax-button *ngIf=\"value && allowClear\" icon=\"far fa-times\" type=\"danger blank\" (click)=\"clear()\" [disabled]=\"disabled\" [tabIndex]=\"-1\"></ax-button>\r\n <ng-content select=\"[end]\">\r\n </ng-content>\r\n </div>\r\n</div>\r\n<!-- [textMask]=\"{mask: mask , showMask:showMask , guid: maskGuid , keepCharPositions: maskKeepCharPositions}\" -->\r\n<!-- <input #input id=\"timePickerValue\" [textMask]=\"timeType\" type=\"text\" [(ngModel)]=\"value\" (keypress)='handleKeyPress($event)'\r\n (keyup)=\"handleKeyUp($event)\" (keydown)=\"handleKeyDown($event)\" (click)=\"handleClick($event)\"> -->", components: [{ type: i1.AXButtonComponent, selector: "ax-button", inputs: ["type", "icon", "submitBehavior", "cancelBehavior", "block", "loading", "selected"] }], directives: [{ type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.MaskedInputDirective, selector: "[textMask]", inputs: ["textMask"], exportAs: ["textMask"] }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
933
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AXTimePickerComponent, decorators: [{
934
- type: Component,
935
- args: [{ selector: 'ax-time-picker', changeDetection: ChangeDetectionStrategy.OnPush, host: { style: 'width: 100%' }, providers: [{ provide: AXValidatableComponent, useExisting: AXTimePickerComponent }], template: "<div class=\"ax form-item\" [class.disabled]=\"disabled\" [attr.id]=\"uid\" #fc>\r\n <div class=\"ax items-wrapper\">\r\n <ng-content select=\"[start]\">\r\n </ng-content>\r\n </div>\r\n <div class=\"content\" #content>\r\n <div class=\"ax form-control input {{size}}\" [class.disabled]=\"disabled\" [class.readonly]=\"readonly\" [class.icon]=\"icon\">\r\n <input #input type=\"text\" class=\"ax {{size}}\" [textMask]=\"timeType\" [(ngModel)]=\"textValue\" placeholder=\"{{placeholder}}\" [readonly]=\"readonly\" [disabled]=\"disabled\" [ngClass]=\"setTextAlign()\" [class.clear]=\"value && allowClear\" (focus)=\"handleInputFocus()\"\r\n (blur)=\"handleInputBlur($event)\" (keypress)='handleKeyPress($event)' (keyup)=\"handleKeyUp($event)\" (keydown)=\"handleKeyDown($event)\" (click)=\"handleClick($event)\">\r\n <i class=\"{{icon}}\" *ngIf=\"icon\"></i>\r\n </div>\r\n </div>\r\n <div class=\"ax items-wrapper\">\r\n <ax-button *ngIf=\"value && allowClear\" icon=\"far fa-times\" type=\"danger blank\" (click)=\"clear()\" [disabled]=\"disabled\" [tabIndex]=\"-1\"></ax-button>\r\n <ng-content select=\"[end]\">\r\n </ng-content>\r\n </div>\r\n</div>\r\n<!-- [textMask]=\"{mask: mask , showMask:showMask , guid: maskGuid , keepCharPositions: maskKeepCharPositions}\" -->\r\n<!-- <input #input id=\"timePickerValue\" [textMask]=\"timeType\" type=\"text\" [(ngModel)]=\"value\" (keypress)='handleKeyPress($event)'\r\n (keyup)=\"handleKeyUp($event)\" (keydown)=\"handleKeyDown($event)\" (click)=\"handleClick($event)\"> -->" }]
936
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { onValueChanged: [{
937
- type: Output
938
- }], timeType: [{
939
- type: Input
940
- }], showCurentTime: [{
941
- type: Input
942
- }] } });
943
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNvcmV4L2NvbXBvbmVudHMvc3JjL2xpYi90aW1lLXBpY2tlci90aW1lLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY29yZXgvY29tcG9uZW50cy9zcmMvbGliL3RpbWUtcGlja2VyL3RpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDVixLQUFLLEVBRUwsdUJBQXVCLEVBQ3ZCLFlBQVksRUFDWixNQUFNLEVBR1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFcEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7OztBQUU1QyxNQUFNLE9BQU8sNEJBQTRCO0NBTXhDO0FBQ0QsTUFBTSxPQUFPLHdCQUF5QixTQUFRLFlBQTBDO0NBQUk7QUFTNUYsTUFBTSxPQUFPLHFCQUFzQixTQUFRLG1CQUFtQjtJQXdPNUQsWUFBc0IsR0FBc0IsRUFBRSxHQUFlO1FBQzNELEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFESSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQXRPNUMsbUJBQWMsR0FBMkMsSUFBSSxZQUFZLEVBQTRCLENBQUM7UUFTdEcsU0FBSSxHQUFXLE1BQU0sQ0FBQztRQUV0QixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUVoQyxrQkFBYSxHQUFZLElBQUksQ0FBQztRQUM5QixXQUFNLEdBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcs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QUMsQ0FBQztJQUN2RSxDQUFDOzttSEF2OEJVLHFCQUFxQjt1R0FBckIscUJBQXFCLHFNQUZyQixDQUFDLEVBQUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxDQUFDLGlEQ2hDdEYsK2xEQW9Cc0c7NEZEY3pGLHFCQUFxQjtrQkFQakMsU0FBUzsrQkFDRSxnQkFBZ0IsbUJBRVQsdUJBQXVCLENBQUMsTUFBTSxRQUN6QyxFQUFFLEtBQUssRUFBQyxhQUFhLEVBQUUsYUFDbEIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxXQUFXLHVCQUF1QixFQUFFLENBQUM7aUlBSXBGLGNBQWM7c0JBRGIsTUFBTTtnQkFRUCxRQUFRO3NCQURQLEtBQUs7Z0JBS04sY0FBYztzQkFEYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBPdXRwdXQsXHJcbiAgQ29udGVudENoaWxkXHJcblxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBWEJhc2VUZXh0Q29tcG9uZW50LCBBWFZhbGlkYXRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vYmFzZS9lbGVtZW50LmNsYXNzJztcclxuaW1wb3J0IHsgXyB9IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcclxuaW1wb3J0IHsgQVhWYWx1ZUV2ZW50IH0gZnJvbSAnLi4vYmFzZS9ldmVudHMuY2xhc3MnO1xyXG5pbXBvcnQgeyBBWFRyYW5zbGF0b3IgfSBmcm9tICdAYWNvcmV4L2NvcmUnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFYVGltZVBpY2tlckl0ZW1DaGFuZ2VkRXZlbnQge1xyXG4gIG1pbnV0ZT86IG51bWJlcjtcclxuICBzZWNvbmQ/OiBudW1iZXI7XHJcbiAgaG91cj86IG51bWJlcjtcclxuICB0aW1lOiBzdHJpbmc7XHJcblxyXG59XHJcbmV4cG9ydCBjbGFzcyBBWFRpbWVQaWNrZXJDaGFuZ2VkRXZlbnQgZXh0ZW5kcyBBWFZhbHVlRXZlbnQ8QVhUaW1lUGlja2VySXRlbUNoYW5nZWRFdmVudD4geyB9XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2F4LXRpbWUtcGlja2VyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGltZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGhvc3Q6IHsgc3R5bGU6J3dpZHRoOiAxMDAlJyB9LFxyXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogQVhWYWxpZGF0YWJsZUNvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYVGltZVBpY2tlckNvbXBvbmVudCB9XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQVhUaW1lUGlja2VyQ29tcG9uZW50IGV4dGVuZHMgQVhCYXNlVGV4dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQE91dHB1dCgpXHJcbiAgb25WYWx1ZUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxBWFRpbWVQaWNrZXJDaGFuZ2VkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBWFRpbWVQaWNrZXJDaGFuZ2VkRXZlbnQ+KCk7XHJcblxyXG4gIC8vIEBWaWV3Q2hpbGQoJ2lucHV0JywgeyBzdGF0aWM6IHRydWUgfSlcclxuICAvLyBAQ29udGVudENoaWxkKCdpbnB1dCcsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgLy8gaW5wdXQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgdGltZVR5cGU6IGFueTtcclxuXHJcbiAgdHlwZTogc3RyaW5nID0gJ0hIbW0nO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2hvd0N1cmVudFRpbWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY2xlYXJEaXNhYmxlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgSEhtbXNzOiBhbnkgPSBbL1swLTJdLywgL1swLTldLywgJzonLCAvWzAtNV0vLCAvWzAtOV0vLCAnOicsIC9bMC01XS8sIC9bMC05XS9dO1xyXG4gIEhIbW06IGFueSA9IFsvWzAtMl0vLCAvWzAtOV0vLCAnOicsIC9bMC01XS8sIC9bMC05XS9dO1xyXG4gIEhIOiBhbnkgPSBbL1swLTJdLywgL1swLTldL107XHJcbiAgaGhtbXNzOiBhbnkgPSBbL1swLTFdLywgL1swLTldLywgJzonLCAvWzAtNV0vLCAvWzAtOV0vLCAnOicsIC9bMC01XS8sIC9bMC05XS9dO1xyXG4gIGhobW06IGFueSA9IFsvWzAtMV0vLCAvWzAtOV0vLCAnOicsIC9bMC01XS8sIC9bMC05XS9dO1xyXG4gIGhoOiBhbnkgPSBbL1swLTFdLywgL1swLTldL107XHJcbiAgLy8gVE9ETzogYXBwbHkgYW0gcG0gZnJvbSBsb2NhbGVcclxuICBoaG1tc3NhbTogYW55ID0gWy9bMC0xXS8sIC9bMC05XS8sICc6JywgL1swLTVdLywgL1swLTldLywgJzonLCAvWzAtNV0vLCAvWzAtOV0vLCAnICcsIC9bYXxwfNmCfNioXS8sIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUubScpXTtcclxuICBoaG1tYW06IGFueSA9IFsvWzAtMV0vLCAvWzAtOV0vLCAnOicsIC9bMC01XS8sIC9bMC05XS8sICcgJywgL1thfHB82YJ82KhdLywgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5tJyldO1xyXG4gIGhoYW06IGFueSA9IFsvWzAtMV0vLCAvWzAtOV0vLCAnICcsIC9bYXxwfNmCfNioXS8sIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUubScpXTtcclxuICB0ZXh0VmFsdWU6IHN0cmluZyA9ICcnO1xyXG5cclxuICB2YWx1ZUhhbTogc3RyaW5nID0gJy0tICcgKyBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmFtJyk7XHJcbiAgdmFsdWVNYW06IHN0cmluZyA9ICctLTotLSAnICsgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5hbScpO1xyXG4gIHZhbHVlU2FtOiBzdHJpbmcgPSAnLS06LS06LS0gJyArIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYW0nKTtcclxuXHJcblxyXG4gIHByaXZhdGUgX3ZhbHVlczogc3RyaW5nO1xyXG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl92YWx1ZXM7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgdmFsdWUodjogc3RyaW5nKSB7XHJcbiAgICBpZiAodiA9PT0gJycgfHwgdiA9PSBudWxsIHx8IHYgPT09ICctLTotLTotLScgfHwgdiA9PT0gJy0tOi0tJyB8fCB2ID09PSAnLS0nIHx8IHYgPT09IHRoaXMudmFsdWVTYW0gfHwgdiA9PT0gdGhpcy52YWx1ZU1hbSB8fCB2ID09PSB0aGlzLnZhbHVlSGFtKSB7XHJcbiAgICAgIHRoaXMuY2xlYXJEaXNhYmxlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgY29uc3Qgb2xkID0gdGhpcy5fdmFsdWVzO1xyXG4gICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xyXG4gICAgICAgIGNhc2UgJ0hIbW1zcyc6XHJcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9ICctLTotLTotLSc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdISG1tJzpcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJy0tOi0tJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ0hIJzpcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJy0tJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ2hobW1zcyc6XHJcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9ICctLTotLTotLSc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdoaG1tJzpcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJy0tOi0tJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ2hoJzpcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJy0tJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ2hobW1zc2FtJzpcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy52YWx1ZVNhbTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ2hobW1hbSc6XHJcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHRoaXMudmFsdWVNYW07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdoaGFtJzpcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy52YWx1ZUhhbTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLl92YWx1ZXMgPSBudWxsO1xyXG4gICAgICBpZiAodiAhPT0gb2xkKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KG51bGwpO1xyXG4gICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZWQuZW1pdCh7XHJcbiAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXHJcbiAgICAgICAgICB2YWx1ZTogeyBob3VyOiBudWxsLCBtaW51dGU6IG51bGwsIHNlY29uZDogbnVsbCwgdGltZTogbnVsbCB9LFxyXG4gICAgICAgICAgb2xkVmFsdWU6IHsgdGltZTogb2xkIH0sXHJcbiAgICAgICAgICBodG1sRWxlbWVudDogdGhpcy5yZWYubmF0aXZlRWxlbWVudFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNsZWFyRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICBpZiAodGhpcy5fdmFsdWVzICYmIHYpIHtcclxuICAgICAgICBjb25zdCBvbGQgPSB0aGlzLl92YWx1ZXM7XHJcbiAgICAgICAgY29uc3QgaW5kMSA9IHYuY2hhckF0KDApO1xyXG4gICAgICAgIGNvbnN0IGluZDIgPSB2LmNoYXJBdCgxKTtcclxuICAgICAgICBjb25zdCBpbmQzID0gdi5jaGFyQXQoMik7XHJcbiAgICAgICAgY29uc3QgaW5kNCA9IHYuY2hhckF0KDMpO1xyXG4gICAgICAgIGNvbnN0IGluZDUgPSB2LmNoYXJBdCg0KTtcclxuICAgICAgICBjb25zdCBpbmQ2ID0gdi5jaGFyQXQoNSk7XHJcbiAgICAgICAgY29uc3QgaW5kNyA9IHYuY2hhckF0KDYpO1xyXG4gICAgICAgIGNvbnN0IGluZDggPSB2LmNoYXJBdCg3KTtcclxuICAgICAgICBjb25zdCBpbmQ5ID0gdi5jaGFyQXQoOCk7XHJcbiAgICAgICAgY29uc3QgaW5kMTAgPSB2LmNoYXJBdCg5KTtcclxuXHJcbiAgICAgICAgY29uc3QgaW5kT2xkNCA9IG9sZC5jaGFyQXQoOSk7XHJcbiAgICAgICAgY29uc3QgaW5kT2xkNyA9IG9sZC5jaGFyQXQoOSk7XHJcbiAgICAgICAgY29uc3QgaW5kT2xkMTAgPSBvbGQuY2hhckF0KDkpO1xyXG5cclxuICAgICAgICAvLyBoYW5kbGUgaGhtbXNzQW1cclxuICAgICAgICBpZiAoaW5kMSA9PT0gJy0nICYmIGluZDIgIT09ICctJyAmJiB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzYW0pIHtcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJzAnICsgaW5kMiArIGluZDMgKyBpbmQ0ICsgaW5kNSArIGluZDYgKyBpbmQ3ICsgaW5kOCArIGluZDkgKyBpbmQxMCArIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUubScpO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIDIpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gMjtcclxuICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW5kNCA9PT0gJy0nICYmIGluZDUgIT09ICctJyAmJiB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzYW0pIHtcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gaW5kMSArIGluZDIgKyBpbmQzICsgJzAnICsgaW5kNSArIGluZDYgKyBpbmQ3ICsgaW5kOCArIGluZDkgKyBpbmQxMCArIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUubScpO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIDUpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gNTtcclxuICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW5kNyA9PT0gJy0nICYmIGluZDggIT09ICctJyAmJiB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzYW0pIHtcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gaW5kMSArIGluZDIgKyBpbmQzICsgaW5kNCArIGluZDUgKyBpbmQ2ICsgJzAnICsgaW5kOCArIGluZDkgKyBpbmQxMCArIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUubScpO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIDgpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gODtcclxuICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW5kT2xkMTAgPT09ICctJyAmJiB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzYW0pIHtcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gaW5kMSArIGluZDIgKyBpbmQzICsgaW5kNCArIGluZDUgKyBpbmQ2ICsgaW5kNyArIGluZDggKyBpbmQ5ICsgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5hbScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9cclxuICAgICAgICBpZiAoaW5kMSA9PT0gJy0nICYmIGluZDIgIT09ICctJyAmJiB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbWFtKSB7XHJcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9ICcwJyArIGluZDIgKyBpbmQzICsgaW5kNCArIGluZDUgKyBpbmQ2ICsgaW5kNyArIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUubScpO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIDIpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gMjtcclxuICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW5kNCA9PT0gJy0nICYmIGluZDUgIT09ICctJyAmJiB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbWFtKSB7XHJcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IGluZDEgKyBpbmQyICsgaW5kMyArICcwJyArIGluZDUgKyBpbmQ2ICsgaW5kNyArIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUubScpO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIDUpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gNTtcclxuICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW5kT2xkNyA9PT0gJy0nICYmIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tYW0pIHtcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gaW5kMSArIGluZDIgKyBpbmQzICsgaW5kNCArIGluZDUgKyBpbmQ2ICsgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5hbScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9cclxuICAgICAgICBpZiAoaW5kMSA9PT0gJy0nICYmIGluZDIgIT09ICctJyAmJiB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhhbSkge1xyXG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSAnMCcgKyBpbmQyICsgaW5kMyArIGluZDQgKyBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLm0nKTtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCAyKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA9IDI7XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGluZE9sZDQgPT09ICctJyAmJiB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhhbSkge1xyXG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSBpbmQxICsgaW5kMiArIGluZDMgKyBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmFtJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL1xyXG4gICAgICAgIGlmIChpbmQxID09PSAnLScgJiYgaW5kMiAhPT0gJy0nICYmICh0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzIHx8IHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5ISG1tc3MpKSB7XHJcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9ICcwJyArIGluZDIgKyBpbmQzICsgaW5kNCArIGluZDUgKyBpbmQ2ICsgaW5kNyArIGluZDg7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgMik7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSAyO1xyXG4gICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpbmQ0ID09PSAnLScgJiYgaW5kNSAhPT0gJy0nICYmICh0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzIHx8IHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5ISG1tc3MpKSB7XHJcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IGluZDEgKyBpbmQyICsgaW5kMyArICcwJyArIGluZDUgKyBpbmQ2ICsgaW5kNyArIGluZDg7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgNik7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSA2O1xyXG4gICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpbmQ3ID09PSAnLScgJiYgaW5kOCAhPT0gJy0nICYmICh0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzIHx8IHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5ISG1tc3MpKSB7XHJcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IGluZDEgKyBpbmQyICsgaW5kMyArIGluZDQgKyBpbmQ1ICsgaW5kNiArICcwJyArIGluZDg7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgOSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSA5O1xyXG4gICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL1xyXG4gICAgICAgIGlmIChpbmQxID09PSAnLScgJiYgaW5kMiAhPT0gJy0nICYmICh0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbSB8fCB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuSEhtbSkpIHtcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJzAnICsgaW5kMiArIGluZDMgKyBpbmQ0ICsgaW5kNTtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCAyKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA9IDI7XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGluZDQgPT09ICctJyAmJiBpbmQ1ICE9PSAnLScgJiYgKHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tIHx8IHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5ISG1tKSkge1xyXG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSBpbmQxICsgaW5kMiArIGluZDMgKyAnMCcgKyBpbmQ1O1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIDUpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gNTtcclxuICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9cclxuICAgICAgICBpZiAoaW5kMSA9PT0gJy0nICYmIGluZDIgIT09ICctJyAmJiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhoIHx8IHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5ISCkpIHtcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJzAnICsgaW5kMjtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCAyKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA9IDI7XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHYgIT09IHRoaXMuX3ZhbHVlcykge1xyXG4gICAgICAgIGNvbnN0IG9sZCA9IHRoaXMuX3ZhbHVlcztcclxuICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHY7XHJcbiAgICAgICAgdGhpcy5fdmFsdWVzID0gKHYgJiYgdi5pbmRleE9mKCctJykgPT09IC0xKSA/IHYgOiBudWxsO1xyXG4gICAgICAgIGlmICh2LmluZGV4T2YoJy0nKSA9PT0gLTEpIHtcclxuICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2KTtcclxuICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZWQuZW1pdCh7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudDogdGhpcyxcclxuICAgICAgICAgICAgdmFsdWU6IHtcclxuICAgICAgICAgICAgICB0aW1lOiB2LFxyXG4gICAgICAgICAgICAgIGhvdXI6IE51bWJlcih2WzBdICsgdlsxXSksXHJcbiAgICAgICAgICAgICAgbWludXRlOiB2WzNdICYmIHZbM10gIT09IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYScpICYmIHZbM10gIT09IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucCcpID8gTnVtYmVyKHZbM10gKyB2WzRdKSA6IG51bGwsXHJcbiAgICAgICAgICAgICAgc2Vjb25kOiB2WzZdICYmIHZbNl0gIT09IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYScpICYmIHZbNl0gIT09IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucCcpID8gTnVtYmVyKHZbNl0gKyB2WzddKSA6IG51bGxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb2xkVmFsdWU6IHsgdGltZTogb2xkIH0sXHJcbiAgICAgICAgICAgIGh0bWxFbGVtZW50OiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIHRoaXMuY2xlYXJWYWxpZGF0aW9uU3R5bGUodGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGN1cnNvclBvc2l0aW9uOiBudW1iZXIgPSAwO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcmVmOiBFbGVtZW50UmVmKSB7XHJcbiAgICBzdXBlcihjZHIsIHJlZik7XHJcbiAgICBcclxuICAgIHRoaXMudGltZVR5cGUgPSAnSEhtbSc7XHJcbiAgfVxyXG4gIGNsZWFyVmFsdWUoKSB7XHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICB0aGlzLmhhbmRsZUlucHV0Rm9jdXMoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgc3dpdGNoICh0aGlzLnRpbWVUeXBlKSB7XHJcbiAgICAgIGNhc2UgJ0hIbW1zcyc6XHJcbiAgICAgICAgdGhpcy50eXBlID0gJ0hIbW1zcyc7XHJcbiAgICAgICAgdGhpcy50aW1lVHlwZSA9IHtcclxuICAgICAgICAgIGd1aWRlOiB0cnVlLFxyXG4gICAgICAgICAgc2hvd01hc2s6IHRydWUsXHJcbiAgICAgICAgICBtYXNrOiB0aGlzLkhIbW1zcyxcclxuICAgICAgICAgIGtlZXBDaGFyUG9zaXRpb25zOiB0cnVlLFxyXG4gICAgICAgICAgcGxhY2Vob2xkZXJDaGFyOiAnLSdcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy52YWx1ZSA/IHRoaXMudmFsdWUgOiAnLS06LS06LS0nO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdISG1tJzpcclxuICAgICAgICB0aGlzLnR5cGUgPSAnSEhtbSc7XHJcbiAgICAgICAgdGhpcy50aW1lVHlwZSA9IHtcclxuICAgICAgICAgIGd1aWRlOiB0cnVlLFxyXG4gICAgICAgICAgc2hvd01hc2s6IHRydWUsXHJcbiAgICAgICAgICBtYXNrOiB0aGlzLkhIbW0sXHJcbiAgICAgICAgICBrZWVwQ2hhclBvc2l0aW9uczogdHJ1ZSxcclxuICAgICAgICAgIHBsYWNlaG9sZGVyQ2hhcjogJy0nXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHRoaXMudmFsdWUgPyB0aGlzLnZhbHVlIDogJy0tOi0tJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnSEgnOlxyXG4gICAgICAgIHRoaXMudHlwZSA9ICdISCc7XHJcbiAgICAgICAgdGhpcy50aW1lVHlwZSA9IHtcclxuICAgICAgICAgIGd1aWRlOiB0cnVlLFxyXG4gICAgICAgICAgc2hvd01hc2s6IHRydWUsXHJcbiAgICAgICAgICBtYXNrOiB0aGlzLkhILFxyXG4gICAgICAgICAga2VlcENoYXJQb3NpdGlvbnM6IHRydWUsXHJcbiAgICAgICAgICBwbGFjZWhvbGRlckNoYXI6ICctJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZSA6ICctLSc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2hobW1zcyc6XHJcbiAgICAgICAgdGhpcy50eXBlID0gJ2hobW1zcyc7XHJcbiAgICAgICAgdGhpcy50aW1lVHlwZSA9IHtcclxuICAgICAgICAgIGd1aWRlOiB0cnVlLFxyXG4gICAgICAgICAgc2hvd01hc2s6IHRydWUsXHJcbiAgICAgICAgICBtYXNrOiB0aGlzLmhobW1zcyxcclxuICAgICAgICAgIGtlZXBDaGFyUG9zaXRpb25zOiB0cnVlLFxyXG4gICAgICAgICAgcGxhY2Vob2xkZXJDaGFyOiAnLSdcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy52YWx1ZSA/IHRoaXMudmFsdWUgOiAnLS06LS06LS0nO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdoaG1tJzpcclxuICAgICAgICB0aGlzLnR5cGUgPSAnaGhtbSc7XHJcbiAgICAgICAgdGhpcy50aW1lVHlwZSA9IHtcclxuICAgICAgICAgIGd1aWRlOiB0cnVlLFxyXG4gICAgICAgICAgc2hvd01hc2s6IHRydWUsXHJcbiAgICAgICAgICBtYXNrOiB0aGlzLmhobW0sXHJcbiAgICAgICAgICBrZWVwQ2hhclBvc2l0aW9uczogdHJ1ZSxcclxuICAgICAgICAgIHBsYWNlaG9sZGVyQ2hhcjogJy0nXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHRoaXMudmFsdWUgPyB0aGlzLnZhbHVlIDogJy0tOi0tJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnaGgnOlxyXG4gICAgICAgIHRoaXMudHlwZSA9ICdoaCc7XHJcblxyXG4gICAgICAgIHRoaXMudGltZVR5cGUgPSB7XHJcbiAgICAgICAgICBndWlkZTogdHJ1ZSxcclxuICAgICAgICAgIHNob3dNYXNrOiB0cnVlLFxyXG4gICAgICAgICAgbWFzazogdGhpcy5oaCxcclxuICAgICAgICAgIGtlZXBDaGFyUG9zaXRpb25zOiB0cnVlLFxyXG4gICAgICAgICAgcGxhY2Vob2xkZXJDaGFyOiAnLSdcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy52YWx1ZSA/IHRoaXMudmFsdWUgOiAnLS0nO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdoaG1tc3NhbSc6XHJcbiAgICAgICAgdGhpcy50eXBlID0gJ2hobW1zc2FtJztcclxuXHJcbiAgICAgICAgdGhpcy50aW1lVHlwZSA9IHtcclxuICAgICAgICAgIGd1aWRlOiB0cnVlLFxyXG4gICAgICAgICAgc2hvd01hc2s6IHRydWUsXHJcbiAgICAgICAgICBtYXNrOiB0aGlzLmhobW1zc2FtLFxyXG4gICAgICAgICAga2VlcENoYXJQb3NpdGlvbnM6IHRydWUsXHJcbiAgICAgICAgICBwbGFjZWhvbGRlckNoYXI6ICctJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZSA6IHRoaXMudmFsdWVTYW07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2hobW1hbSc6XHJcbiAgICAgICAgdGhpcy50eXBlID0gJ2hobW1hbSc7XHJcblxyXG4gICAgICAgIHRoaXMudGltZVR5cGUgPSB7XHJcbiAgICAgICAgICBndWlkZTogdHJ1ZSxcclxuICAgICAgICAgIHNob3dNYXNrOiB0cnVlLFxyXG4gICAgICAgICAgbWFzazogdGhpcy5oaG1tYW0sXHJcbiAgICAgICAgICBrZWVwQ2hhclBvc2l0aW9uczogdHJ1ZSxcclxuICAgICAgICAgIHBsYWNlaG9sZGVyQ2hhcjogJy0nXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHRoaXMudmFsdWUgPyB0aGlzLnZhbHVlIDogdGhpcy52YWx1ZU1hbTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2hoYW0nOlxyXG4gICAgICAgIHRoaXMudHlwZSA9ICdoaGFtJztcclxuXHJcbiAgICAgICAgdGhpcy50aW1lVHlwZSA9IHtcclxuICAgICAgICAgIGd1aWRlOiB0cnVlLFxyXG4gICAgICAgICAgc2hvd01hc2s6IHRydWUsXHJcbiAgICAgICAgICBtYXNrOiB0aGlzLmhoYW0sXHJcbiAgICAgICAgICBrZWVwQ2hhclBvc2l0aW9uczogdHJ1ZSxcclxuICAgICAgICAgIHBsYWNlaG9sZGVyQ2hhcjogJy0nXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHRoaXMudmFsdWUgPyB0aGlzLnZhbHVlIDogdGhpcy52YWx1ZUhhbTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aGlzLnR5cGUgPSAnSEhtbSc7XHJcbiAgICAgICAgdGhpcy50aW1lVHlwZSA9IHtcclxuICAgICAgICAgIGd1aWRlOiB0cnVlLFxyXG4gICAgICAgICAgc2hvd01hc2s6IHRydWUsXHJcbiAgICAgICAgICBtYXNrOiB0aGlzLkhIbW0sXHJcbiAgICAgICAgICBrZWVwQ2hhclBvc2l0aW9uczogdHJ1ZSxcclxuICAgICAgICAgIHBsYWNlaG9sZGVyQ2hhcjogJy0nXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHRoaXMudmFsdWUgPyB0aGlzLnZhbHVlIDogJy0tOi0tJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zaG93Q3VyZW50VGltZSA9PT0gdHJ1ZSkge1xyXG4gICAgICBjb25zdCBob3VyID0gbmV3IERhdGUoKS5nZXRIb3VycygpID4gMTAgPyBuZXcgRGF0ZSgpLmdldEhvdXJzKCkgOiAnMCcgKyBuZXcgRGF0ZSgpLmdldEhvdXJzKCk7XHJcbiAgICAgIGxldCBhbUhvdXI6IGFueTtcclxuXHJcbiAgICAgIGlmIChuZXcgRGF0ZSgpLmdldEhvdXJzKCkgPiAxMCkge1xyXG4gICAgICAgIGlmIChuZXcgRGF0ZSgpLmdldEhvdXJzKCkgPiAxMikge1xyXG4gICAgICAgICAgaWYgKG5ldyBEYXRlKCkuZ2V0SG91cnMoKSAtIDEyIDwgMTApIHtcclxuICAgICAgICAgICAgYW1Ib3VyID0gJzAnICsgKG5ldyBEYXRlKCkuZ2V0SG91cnMoKSAtIDEyKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGFtSG91ciA9IG5ldyBEYXRlKCkuZ2V0SG91cnMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYW1Ib3VyID0gbmV3IERhdGUoKS5nZXRIb3VycygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhbUhvdXIgPSAnMCcgKyBuZXcgRGF0ZSgpLmdldEhvdXJzKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IG1pbiA9IG5ldyBEYXRlKCkuZ2V0TWludXRlcygpID4gOSA/IG5ldyBEYXRlKCkuZ2V0TWludXRlcygpIDogJzAnICsgbmV3IERhdGUoKS5nZXRNaW51dGVzKCk7XHJcbiAgICAgIGNvbnN0IHNlYyA9IG5ldyBEYXRlKCkuZ2V0U2Vjb25kcygpID4gOSA/IG5ldyBEYXRlKCkuZ2V0U2Vjb25kcygpIDogJzAnICsgbmV3IERhdGUoKS5nZXRTZWNvbmRzKCk7XHJcbiAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdoaCcgfHwgdGhpcy50eXBlID09PSAnaGhtbScgfHwgdGhpcy50eXBlID09PSAnaGhtbXNzJyB8fCB0aGlzLnR5cGUgPT09ICdoaG1tc3NhbScpIHtcclxuICAgICAgICBpZiAoaG91ciA+PSAxMikge1xyXG4gICAgICAgICAgdGhpcy52YWx1ZSA9IGFtSG91ciArICc6JyArIG1pbiArICc6JyArIHNlYyArICcgJyArIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucG0nKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy52YWx1ZSA9IGFtSG91ciArICc6JyArIG1pbiArICc6JyArIHNlYyArICcgJyArIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYW0nKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSAnaGhhbScpIHtcclxuICAgICAgICBpZiAoaG91ciA+PSAxMikge1xyXG4gICAgICAgICAgdGhpcy52YWx1ZSA9IGFtSG91ciArICcgJyArIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucG0nKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy52YWx1ZSA9IGFtSG91ciArICcgJyArIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYW0nKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSAnaGhtbWFtJykge1xyXG4gICAgICAgIGlmIChob3VyID49IDEyKSB7XHJcbiAgICAgICAgICB0aGlzLnZhbHVlID0gYW1Ib3VyICsgJzonICsgbWluICsgJyAnICsgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5wbScpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnZhbHVlID0gYW1Ib3VyICsgJzonICsgbWluICsgJyAnICsgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5hbScpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gaG91ciArICc6JyArIG1pbiArICc6JyArIHNlYztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25TdGFydGZvY3VzKCkge1xyXG4gICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnN0eWxlLmNhcmV0Q29sb3IgPSAndHJhbnNwYXJlbnQnO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIDApO1xyXG4gICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gMDtcclxuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnN0eWxlLmNhcmV0Q29sb3IgPSAnYXV0byc7XHJcbiAgICB9LCAwKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUlucHV0Rm9jdXMoKSB7XHJcbiAgICB0aGlzLm9uU3RhcnRmb2N1cygpO1xyXG4gICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgfVxyXG4gIGhhbmRsZUlucHV0Qmx1cihlKSB7XHJcbiAgICBpZiAodGhpcy50ZXh0VmFsdWUuaW5kZXhPZignLScpICE9PSAtMSkge1xyXG4gICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xyXG4gICAgICAgIGNhc2UgJ0hIbW1zcyc6XHJcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9ICctLTotLTotLSc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdISG1tJzpcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJy0tOi0tJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ0hIJzpcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJy0tJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ2hobW1zcyc6XHJcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9ICctLTotLTotLSc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdoaG1tJzpcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJy0tOi0tJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ2hoJzpcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJy0tJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ2hobW1zc2FtJzpcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy52YWx1ZVNhbTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ2hobW1hbSc6XHJcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHRoaXMudmFsdWVNYW07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdoaGFtJzpcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy52YWx1ZUhhbTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVLZXlQcmVzcyhldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBpbnB1dENoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKTtcclxuICAgIGNvbnN0IGZpcnN0Q2hhciA9IHRoaXMudGV4dFZhbHVlLmNoYXJBdCgwKTtcclxuICAgIGNvbnN0IHNlY29uZENoYXIgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoMSk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgfHwgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0ID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA9IHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAvLyB0aGlzLmN1cnNvclBvc2l0aW9uICs9IDEgO1xyXG4gICAgICB9XHJcbiAgICB9LCAwKTtcclxuXHJcbiAgICBpZiAoZmlyc3RDaGFyID09PSAnMicpIHtcclxuICAgICAgaWYgKHNlY29uZENoYXIgPT09ICcnIHx8IHRoaXMudGV4dFZhbHVlLmNoYXJBdCgxKSA+PSAnNCcgfHwgdGhpcy5jdXJzb3JQb3NpdGlvbiA8IDMpIHtcclxuICAgICAgICBpZiAoaW5wdXRDaGFyID49ICc0Jykge1xyXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zcyB8fFxyXG4gICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbSB8fFxyXG4gICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGggfHxcclxuICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zc2FtIHx8XHJcbiAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tYW0gfHxcclxuICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhoYW1cclxuICAgICkge1xyXG4gICAgICBpZiAoZmlyc3RDaGFyID09PSAnMScpIHtcclxuICAgICAgICBpZiAoc2Vjb25kQ2hhciA9PT0gJycgfHwgdGhpcy50ZXh0VmFsdWUuY2hhckF0KDEpID49ICczJyB8fCB0aGlzLmN1cnNvclBvc2l0aW9uIDwgMykge1xyXG4gICAgICAgICAgaWYgKGlucHV0Q2hhciA+PSAnMycpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChpbnB1dENoYXIgPT09ICctJykge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlS2V5VXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJyB8fCBldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XHJcbiAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zdHlsZS5jYXJldENvbG9yID0gJ2F1dG8nO1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuICAgIC8vIHVwICYgZG93biBidXR0b25cclxuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xyXG4gICAgICB0aGlzLnNldENhcmV0KCk7XHJcbiAgICB9XHJcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xyXG4gICAgICB0aGlzLnNldENhcmV0KCk7XHJcbiAgICB9XHJcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcgfHwgZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gbGVmdCAmIHJpZ2h0IEJ1dHRvblxyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcgfHwgZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcclxuICAgICAgaWYgKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCB8fCB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgPT09IDApIHtcclxuICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaG9tZSBidXR0b25cclxuICAgIGlmIChldmVudC5rZXkgPT09ICdIb21lJykge1xyXG4gICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBlbmQgYnV0dG9uXHJcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW5kJykge1xyXG4gICAgICBpZiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zc2FtIHx8IHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tYW0gfHwgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhoYW0pIHtcclxuICAgICAgICBpZiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zc2FtKSB7XHJcbiAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gOTtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCB0aGlzLmN1cnNvclBvc2l0aW9uKTtcclxuICAgICAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnN0eWxlLmNhcmV0Q29sb3IgPSAnYXV0byc7XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tYW0pIHtcclxuICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSA2O1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIHRoaXMuY3Vyc29yUG9zaXRpb24pO1xyXG4gICAgICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuY2FyZXRDb2xvciA9ICdhdXRvJztcclxuICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhoYW0pIHtcclxuICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSAzO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIHRoaXMuY3Vyc29yUG9zaXRpb24pO1xyXG4gICAgICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuY2FyZXRDb2xvciA9ICdhdXRvJztcclxuICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gdGhpcy50ZXh0VmFsdWUubGVuZ3RoO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYmFja3NwYWNlIENvbnRyb2xcclxuICAgIGlmIChldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnKSB7XHJcbiAgICAgIGNvbnN0IGluZDEgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoMCk7XHJcbiAgICAgIGNvbnN0IGluZDIgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoMSk7XHJcbiAgICAgIGNvbnN0IGluZDMgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoMik7XHJcbiAgICAgIGNvbnN0IGluZDQgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoMyk7XHJcbiAgICAgIGNvbnN0IGluZDUgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoNCk7XHJcbiAgICAgIGNvbnN0IGluZDYgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoNSk7XHJcbiAgICAgIGNvbnN0IGluZDcgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoNik7XHJcbiAgICAgIGNvbnN0IGluZDggPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoNyk7XHJcbiAgICAgIGNvbnN0IGluZDkgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoOCk7XHJcbiAgICAgIGNvbnN0IGluZDEwID0gdGhpcy50ZXh0VmFsdWUuY2hhckF0KDkpO1xyXG4gICAgICBpZiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zc2FtKSB7XHJcbiAgICAgICAgaWYgKGluZDEwID09PSAnLScpIHtcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gaW5kMSArIGluZDIgKyBpbmQzICsgaW5kNCArIGluZDUgKyBpbmQ2ICsgaW5kNyArIGluZDggKyBpbmQ5ICsgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5hbScpO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIDApO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gMDtcclxuICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1hbSkge1xyXG4gICAgICAgIGlmIChpbmQ3ID09PSAnLScpIHtcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gaW5kMSArIGluZDIgKyBpbmQzICsgaW5kNCArIGluZDUgKyBpbmQ2ICsgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5hbScpO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIDApO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gMDtcclxuICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhoYW0pIHtcclxuICAgICAgICBpZiAoaW5kNCA9PT0gJy0nKSB7XHJcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IGluZDEgKyBpbmQyICsgaW5kMyArIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYW0nKTtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCAwKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA9IDA7XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnRleHRWYWx1ZS5sZW5ndGggPD0gMCkge1xyXG4gICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSAwO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gLT0gMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VuZCcpIHtcclxuICAgICAgaWYgKHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tc3NhbSB8fCB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbWFtIHx8IHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaGFtKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnN0eWxlLmNhcmV0Q29sb3IgPSAndHJhbnNwYXJlbnQnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zdHlsZS5jYXJldENvbG9yID0gJ2F1dG8nO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG5ld1ZhbHVlID0gdGhpcy50ZXh0VmFsdWU7XHJcblxyXG4gICAgY29uc3QgaW5kMSA9IG5ld1ZhbHVlLmNoYXJBdCgwKTtcclxuICAgIGNvbnN0IGluZDIgPSBuZXdWYWx1ZS5jaGFyQXQoMSk7XHJcbiAgICBjb25zdCBpbmQzID0gdGhpcy50ZXh0VmFsdWUuY2hhckF0KDIpO1xyXG4gICAgY29uc3QgaW5kNCA9IHRoaXMudGV4dFZhbHVlLmNoYXJBdCgzKTtcclxuICAgIGNvbnN0IGluZDUgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoNCk7XHJcbiAgICBjb25zdCBpbmQ2ID0gdGhpcy50ZXh0VmFsdWUuY2hhckF0KDUpO1xyXG4gICAgY29uc3QgaW5kNyA9IHRoaXMudGV4dFZhbHVlLmNoYXJBdCg2KTtcclxuICAgIGNvbnN0IGluZDggPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoNyk7XHJcbiAgICBjb25zdCBpbmQ5ID0gdGhpcy50ZXh0VmFsdWUuY2hhckF0KDgpO1xyXG4gICAgY29uc3QgaW5kMTAgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoOSk7XHJcbiAgICBjb25zdCBpbmQxMSA9IHRoaXMudGV4dFZhbHVlLmNoYXJBdCgxMCk7XHJcblxyXG4gICAgLy8gdXAga2V5XHJcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcclxuICAgICAgLy8gaG91clxyXG4gICAgICBpZiAodGhpcy5jdXJzb3JQb3NpdGlvbiA8PSAyKSB7XHJcbiAgICAgICAgY29uc3QgaG91cmluZCA9IGluZDEgKyBpbmQyO1xyXG4gICAgICAgIGNvbnN0IG5ld0hvdXIgPSAraG91cmluZCArIDE7XHJcbiAgICAgICAgbmV3VmFsdWUgPSBuZXdIb3VyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zcyB8fFxyXG4gICAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW0gfHxcclxuICAgICAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaCB8fFxyXG4gICAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zc2FtIHx8XHJcbiAgICAgICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbWFtIHx8XHJcbiAgICAgICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhhbVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaWYgKGhvdXJpbmQgPT09ICctLScpIHtcclxuICAgICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoaW5kMSAhPT0gJy0nICYmIGhvdXJpbmQgPT09IGluZDEgKyAnLScpIHtcclxuICAgICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoaW5kMiAhPT0gJy0nICYmIGhvdXJpbmQgPT09ICctJyArIGluZDIpIHtcclxuICAgICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoK25ld1ZhbHVlID4gMTIpIHtcclxuICAgICAgICAgICAgbmV3VmFsdWUgPSAnMDEnO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICgrbmV3VmFsdWUgPCAxMCkge1xyXG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJyArIG5ld1ZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoaG91cmluZCA9PT0gJy0tJykge1xyXG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChpbmQxICE9PSAnLScgJiYgaG91cmluZCA9PT0gaW5kMSArICctJykge1xyXG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChpbmQyICE9PSAnLScgJiYgaG91cmluZCA9PT0gJy0nICsgaW5kMikge1xyXG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICgrbmV3VmFsdWUgPiAyMykge1xyXG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwMCc7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKCtuZXdWYWx1ZSA8IDEwKSB7XHJcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gJzAnICsgbmV3VmFsdWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGFmdGVySG91cmluZCA9IGluZDMgKyBpbmQ0ICsgaW5kNSArIGluZDYgKyBpbmQ3ICsgaW5kOCArIGluZDkgKyBpbmQxMCArIGluZDExO1xyXG4gICAgICAgIGNvbnN0IGhvdXIgPSBuZXdWYWx1ZS50b1N0cmluZygpICsgYWZ0ZXJIb3VyaW5kO1xyXG4gICAgICAgIHRoaXMudGV4dFZhbHVlID0gaG91cjtcclxuICAgICAgfVxyXG4gICAgICAvLyBtaW51dGVcclxuICAgICAgaWYgKHRoaXMuY3Vyc29yUG9zaXRpb24gPj0gMyAmJiB0aGlzLmN1cnNvclBvc2l0aW9uIDw9IDUpIHtcclxuICAgICAgICBjb25zdCBob3VyaW5kID0gaW5kNCArIGluZDU7XHJcbiAgICAgICAgY29uc3QgbmV3SG91ciA9ICtob3VyaW5kICsgMTtcclxuXHJcbiAgICAgICAgbmV3VmFsdWUgPSBuZXdIb3VyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgaWYgKGhvdXJpbmQgPT09ICctLScpIHtcclxuICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW5kNCAhPT0gJy0nICYmIGhvdXJpbmQgPT09IGluZDQgKyAnLScpIHtcclxuICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW5kNSAhPT0gJy0nICYmIGhvdXJpbmQgPT09ICctJyArIGluZDUpIHtcclxuICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoK25ld1ZhbHVlID4gNTkpIHtcclxuICAgICAgICAgIG5ld1ZhbHVlID0gJzAwJztcclxuICAgICAgICB9IGVsc2UgaWYgKCtuZXdWYWx1ZSA8IDEwKSB7XHJcbiAgICAgICAgICBuZXdWYWx1ZSA9ICcwJyArIG5ld1ZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBiZWZvcmVIb3VyaW5kID0gaW5kMSArIGluZDIgKyBpbmQzO1xyXG4gICAgICAgIGNvbnN0IGFmdGVySG91cmluZCA9IGluZDYgKyBpbmQ3ICsgaW5kOCArIGluZDkgKyBpbmQxMCArIGluZDExO1xyXG4gICAgICAgIGNvbnN0IG1pbnV0ZSA9IGJlZm9yZUhvdXJpbmQgKyBuZXdWYWx1ZS50b1N0cmluZygpICsgYWZ0ZXJIb3VyaW5kO1xyXG4gICAgICAgIHRoaXMudGV4dFZhbHVlID0gbWludXRlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBzZWNvbmRcclxuICAgICAgaWYgKHRoaXMuY3Vyc29yUG9zaXRpb24gPj0gNiAmJiB0aGlzLmN1cnNvclBvc2l0aW9uIDw9IDgpIHtcclxuICAgICAgICBjb25zdCBzZWNvbmRpbmQgPSBpbmQ3ICsgaW5kODtcclxuICAgICAgICBjb25zdCBuZXdTZWNvbmQgPSArc2Vjb25kaW5kICsgMTtcclxuXHJcbiAgICAgICAgbmV3VmFsdWUgPSBuZXdTZWNvbmQudG9TdHJpbmcoKTtcclxuICAgICAgICBpZiAoc2Vjb25kaW5kID09PSAnLS0nKSB7XHJcbiAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGluZDcgIT09ICctJyAmJiBzZWNvbmRpbmQgPT09IGluZDcgKyAnLScpIHtcclxuICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW5kOCAhPT0gJy0nICYmIHNlY29uZGluZCA9PT0gJy0nICsgaW5kOCkge1xyXG4gICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgrbmV3VmFsdWUgPiA1OSkge1xyXG4gICAgICAgICAgbmV3VmFsdWUgPSAnMDAnO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoK25ld1ZhbHVlIDwgMTApIHtcclxuICAgICAgICAgIG5ld1ZhbHVlID0gJzAnICsgbmV3VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGJlZm9yZUhvdXJpbmQgPSBpbmQxICsgaW5kMiArIGluZDMgKyBpbmQ0ICsgaW5kNSArIGluZDY7XHJcbiAgICAgICAgY29uc3QgYWZ0ZXJIb3VyaW5kID0gaW5kOSArIGluZDEwICsgaW5kMTE7XHJcbiAgICAgICAgY29uc3Qgc2Vjb25kID0gYmVmb3JlSG91cmluZCArIG5ld1ZhbHVlLnRvU3RyaW5nKCkgKyBhZnRlckhvdXJpbmQ7XHJcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSBzZWNvbmQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHR5cGUgYW0vUE1cclxuICAgICAgaWYgKHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tc3NhbSkge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnNvclBvc2l0aW9uID4gOCkge1xyXG4gICAgICAgICAgbGV0IHR5cGVpbmQgPSBpbmQxMC50b1N0cmluZygpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGJlZm9yZUhvdXJpbmQgPSBpbmQxICsgaW5kMiArIGluZDMgKyBpbmQ0ICsgaW5kNSArIGluZDYgKyBpbmQ3ICsgaW5kOCArIGluZDk7XHJcbiAgICAgICAgICBjb25zdCBhZnRlckhvdXJpbmQgPSBpbmQxMTtcclxuXHJcbiAgICAgICAgICBpZiAoaW5kMTAgPT09IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucCcpKSB7XHJcbiAgICAgICAgICAgIHR5cGVpbmQgPSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmEnKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoaW5kMTAgPT09IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYScpKSB7XHJcbiAgICAgICAgICAgIHR5cGVpbmQgPSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLnAnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gYmVmb3JlSG91cmluZCArIHR5cGVpbmQgKyBhZnRlckhvdXJpbmQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbWFtKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3Vyc29yUG9zaXRpb24gPj0gNikge1xyXG4gICAgICAgICAgbGV0IHR5cGVpbmQgPSBpbmQ3LnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICAgICAgY29uc3QgYmVmb3JlSG91cmluZCA9IGluZDEgKyBpbmQyICsgaW5kMyArIGluZDQgKyBpbmQ1ICsgaW5kNjtcclxuICAgICAgICAgIGNvbnN0IGFmdGVySG91cmluZCA9IGluZDg7XHJcblxyXG4gICAgICAgICAgaWYgKGluZDcgPT09IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucCcpKSB7XHJcbiAgICAgICAgICAgIHR5cGVpbmQgPSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmEnKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoaW5kNyA9PT0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5hJykpIHtcclxuICAgICAgICAgICAgdHlwZWluZCA9IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucCcpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSBiZWZvcmVIb3VyaW5kICsgdHlwZWluZCArIGFmdGVySG91cmluZDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaGFtKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3Vyc29yUG9zaXRpb24gPj0gMykge1xyXG4gICAgICAgICAgbGV0IHR5cGVpbmQyID0gaW5kNC50b1N0cmluZygpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGJlZm9yZUhvdXJpbmQgPSBpbmQxICsgaW5kMiArIGluZDM7XHJcbiAgICAgICAgICBjb25zdCBhZnRlckhvdXJpbmQgPSBpbmQ1O1xyXG5cclxuICAgICAgICAgIGlmIChpbmQ0ID09PSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLnAnKSkge1xyXG4gICAgICAgICAgICB0eXBlaW5kMiA9IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYScpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChpbmQ0ID09PSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmEnKSkge1xyXG4gICAgICAgICAgICB0eXBlaW5kMiA9IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucCcpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSBiZWZvcmVIb3VyaW5kICsgdHlwZWluZDIgKyBhZnRlckhvdXJpbmQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8ga2V5IGRvd25cclxuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XHJcbiAgICAgIC8vIGhvdXJcclxuICAgICAgaWYgKHRoaXMuY3Vyc29yUG9zaXRpb24gPD0gMikge1xyXG4gICAgICAgIGNvbnN0IGhvdXJpbmQgPSBpbmQxICsgaW5kMjtcclxuICAgICAgICBjb25zdCBuZXdIb3VyID0gK2hvdXJpbmQgLSAxO1xyXG5cclxuICAgICAgICBuZXdWYWx1ZSA9IG5ld0hvdXIudG9TdHJpbmcoKTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzIHx8XHJcbiAgICAgICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbSB8fFxyXG4gICAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhoIHx8XHJcbiAgICAgICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzYW0gfHxcclxuICAgICAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tYW0gfHxcclxuICAgICAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaGFtXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpZiAoaG91cmluZCA9PT0gJy0tJykge1xyXG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChpbmQxICE9PSAnLScgJiYgaG91cmluZCA9PT0gaW5kMSArICctJykge1xyXG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChpbmQyICE9PSAnLScgJiYgaG91cmluZCA9PT0gJy0nICsgaW5kMikge1xyXG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICgrbmV3VmFsdWUgPCAxKSB7XHJcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gJzEyJztcclxuICAgICAgICAgIH0gZWxzZSBpZiAoK25ld1ZhbHVlIDwgMTApIHtcclxuICAgICAgICAgICAgbmV3VmFsdWUgPSAnMCcgKyBuZXdWYWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGhvdXJpbmQgPT09ICctLScpIHtcclxuICAgICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoaW5kMSAhPT0gJy0nICYmIGhvdXJpbmQgPT09IGluZDEgKyAnLScpIHtcclxuICAgICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoaW5kMiAhPT0gJy0nICYmIGhvdXJpbmQgPT09ICctJyArIGluZDIpIHtcclxuICAgICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoK25ld1ZhbHVlIDwgMCkge1xyXG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcyMyc7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKCtuZXdWYWx1ZSA8IDEwKSB7XHJcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gJzAnICsgbmV3VmFsdWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGFmdGVySG91ckluZGV4ID0gaW5kMyArIGluZDQgKyBpbmQ1ICsgaW5kNiArIGluZDcgKyBpbmQ4ICsgaW5kOSArIGluZDEwICsgaW5kMTE7XHJcbiAgICAgICAgY29uc3QgaG91ciA9IG5ld1ZhbHVlLnRvU3RyaW5nKCkgKyBhZnRlckhvdXJJbmRleDtcclxuICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IGhvdXI7XHJcbiAgICAgIH1cclxuICAgICAgLy8gbWludXRlXHJcbiAgICAgIGlmICh0aGlzLmN1cnNvclBvc2l0aW9uID49IDMgJiYgdGhpcy5jdXJzb3JQb3NpdGlvbiA8PSA1KSB7XHJcbiAgICAgICAgY29uc3QgbWludXRlaW5kID0gaW5kNCArIGluZDU7XHJcbiAgICAgICAgY29uc3QgbmV3TWludXRlID0gK21pbnV0ZWluZCAtIDE7XHJcblxyXG4gICAgICAgIG5ld1ZhbHVlID0gbmV3TWludXRlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgaWYgKG1pbnV0ZWluZCA9PT0gJy0tJykge1xyXG4gICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpbmQ0ICE9PSAnLScgJiYgbWludXRlaW5kID09PSBpbmQ0ICsgJy0nKSB7XHJcbiAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGluZDUgIT09ICctJyAmJiBtaW51dGVpbmQgPT09ICctJyArIGluZDUpIHtcclxuICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWludXRlaW5kID09PSAnLS0nKSB7XHJcbiAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCtuZXdWYWx1ZSA8IDApIHtcclxuICAgICAgICAgIG5ld1ZhbHVlID0gJzU5JztcclxuICAgICAgICB9IGVsc2UgaWYgKCtuZXdWYWx1ZSA8IDEwKSB7XHJcbiAgICAgICAgICBuZXdWYWx1ZSA9ICcwJyArIG5ld1ZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBiZWZvcmVNaW51dGVJbmRleCA9IGluZDEgKyBpbmQyICsgaW5kMztcclxuICAgICAgICBjb25zdCBhZnRlck1pbnV0ZUluZGV4ID0gaW5kNiArIGluZDcgKyBpbmQ4ICsgaW5kOSArIGluZDEwICsgaW5kMTE7XHJcbiAgICAgICAgY29uc3QgbWludXRlID0gYmVmb3JlTWludXRlSW5kZXggKyBuZXdWYWx1ZS50b1N0cmluZygpICsgYWZ0ZXJNaW51dGVJbmRleDtcclxuICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IG1pbnV0ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gc2Vjb25kXHJcbiAgICAgIGlmICh0aGlzLmN1cnNvclBvc2l0aW9uID49IDYgJiYgdGhpcy5jdXJzb3JQb3NpdGlvbiA8PSA4KSB7XHJcbiAgICAgICAgY29uc3Qgc2Vjb25kSW5kZXggPSBpbmQ3ICsgaW5kODtcclxuICAgICAgICBjb25zdCBuZXdTZWNvbmQgPSArc2Vjb25kSW5kZXggLSAxO1xyXG5cclxuICAgICAgICBuZXdWYWx1ZSA9IG5ld1NlY29uZC50b1N0cmluZygpO1xyXG4gICAgICAgIGlmIChzZWNvbmRJbmRleCA9PT0gJy0tJykge1xyXG4gICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpbmQ3ICE9PSAnLScgJiYgc2Vjb25kSW5kZXggPT09IGluZDcgKyAnLScpIHtcclxuICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW5kOCAhPT0gJy0nICYmIHNlY29uZEluZGV4ID09PSAnLScgKyBpbmQ4KSB7XHJcbiAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNlY29uZEluZGV4ID09PSAnLS0nKSB7XHJcbiAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCtuZXdWYWx1ZSA8IDApIHtcclxuICAgICAgICAgIG5ld1ZhbHVlID0gJzU5JztcclxuICAgICAgICB9IGVsc2UgaWYgKCtuZXdWYWx1ZSA8IDEwKSB7XHJcbiAgICAgICAgICBuZXdWYWx1ZSA9ICcwJyArIG5ld1ZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBiZWZvcmVzZWNvbmRJbmRleCA9IGluZDEgKyBpbmQyICsgaW5kMyArIGluZDQgKyBpbmQ1ICsgaW5kNjtcclxuICAgICAgICBjb25zdCBhZnRlcnNlY29uZEluZGV4ID0gaW5kOSArIGluZDEwICsgaW5kMTE7XHJcbiAgICAgICAgY29uc3Qgc2Vjb25kID0gYmVmb3Jlc2Vjb25kSW5kZXggKyBuZXdWYWx1ZS50b1N0cmluZygpICsgYWZ0ZXJzZWNvbmRJbmRleDtcclxuICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHNlY29uZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gdHlwZVxyXG4gICAgICBpZiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zc2FtKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3Vyc29yUG9zaXRpb24gPiA4KSB7XHJcbiAgICAgICAgICBsZXQgdHlwZWluZCA9IGluZDEwLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICAgICAgY29uc3QgYmVmb3JlSG91cmluZCA9IGluZDEgKyBpbmQyICsgaW5kMyArIGluZDQgKyBpbmQ1ICsgaW5kNiArIGluZDcgKyBpbmQ4ICsgaW5kOTtcclxuICAgICAgICAgIGNvbnN0IGFmdGVySG91cmluZCA9IGluZDExO1xyXG5cclxuICAgICAgICAgIGlmIChpbmQxMCA9PT0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5wJykpIHtcclxuICAgICAgICAgICAgdHlwZWluZCA9IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYScpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChpbmQxMCA9PT0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5hJykpIHtcclxuICAgICAgICAgICAgdHlwZWluZCA9IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucCcpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSBiZWZvcmVIb3VyaW5kICsgdHlwZWluZCArIGFmdGVySG91cmluZDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tYW0pIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJzb3JQb3NpdGlvbiA+PSA2KSB7XHJcbiAgICAgICAgICBsZXQgdHlwZWluZCA9IGluZDcudG9TdHJpbmcoKTtcclxuXHJcbiAgICAgICAgICBjb25zdCBiZWZvcmVIb3VyaW5kID0gaW5kMSArIGluZDIgKyBpbmQzICsgaW5kNCArIGluZDUgKyBpbmQ2O1xyXG4gICAgICAgICAgY29uc3QgYWZ0ZXJIb3VyaW5kID0gaW5kODtcclxuXHJcbiAgICAgICAgICBpZiAoaW5kNyA9PT0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5wJykpIHtcclxuICAgICAgICAgICAgdHlwZWluZCA9IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYScpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChpbmQ3ID09PSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmEnKSkge1xyXG4gICAgICAgICAgICB0eXBlaW5kID0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5wJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IGJlZm9yZUhvdXJpbmQgKyB0eXBlaW5kICsgYWZ0ZXJIb3VyaW5kO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhoYW0pIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJzb3JQb3NpdGlvbiA+PSAzKSB7XHJcbiAgICAgICAgICBsZXQgdHlwZWluZDIgPSBpbmQ0LnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICAgICAgY29uc3QgYmVmb3JlSG91cmluZCA9IGluZDEgKyBpbmQyICsgaW5kMztcclxuICAgICAgICAgIGNvbnN0IGFmdGVySG91cmluZCA9IGluZDU7XHJcbiAgICAgICAgICAvL1RPIERPIHRoaXMgaXMgd3JvbmcgY2hlY2sgaW5kZXhcclxuICAgICAgICAgIGlmIChpbmQ0ID09PSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLnAnKSkge1xyXG4gICAgICAgICAgICB0eXBlaW5kMiA9IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYScpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChpbmQ0ID09PSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmEnKSkge1xyXG4gICAgICAgICAgICB0eXBlaW5kMiA9IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucCcpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSBiZWZvcmVIb3VyaW5kICsgdHlwZWluZDIgKyBhZnRlckhvdXJpbmQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcclxuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnN0eWxlLmNhcmV0Q29sb3IgPSAndHJhbnNwYXJlbnQnO1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0RlbGV0ZScpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUNsaWNrKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0IHx8IHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9PT0gMCkge1xyXG4gICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZG9HZXRDYXJldFBvc2l0aW9uKGN0cmwpIHtcclxuICAgIGxldCBDYXJldFBvcyA9IDA7XHJcbiAgICBpZiAoY3RybC5zZWxlY3Rpb25TdGFydCB8fCBjdHJsLnNlbGVjdGlvblN0YXJ0ID09PSAwKSB7XHJcbiAgICAgIENhcmV0UG9zID0gY3RybC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgcmV0dXJuIENhcmV0UG9zO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0Q2FyZXRQb3NpdGlvbihjdHJsLCBwb3MpIHtcclxuICAgIGlmIChjdHJsLnNldFNlbGVjdGlvblJhbmdlKSB7XHJcbiAgICAgIGN0cmwuZm9jdXMoKTtcclxuICAgICAgY3RybC5zZXRTZWxlY3Rpb25SYW5nZShwb3MsIHBvcyk7XHJcbiAgICB9IGVsc2UgaWYgKGN0cmwuY3JlYXRlVGV4dFJhbmdlKSB7XHJcbiAgICAgIGNvbnN0IHJhbmdlID0gY3RybC5jcmVhdGVUZXh0UmFuZ2UoKTtcclxuICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7XHJcbiAgICAgIHJhbmdlLm1vdmVFbmQoJ2NoYXJhY3RlcicsIHBvcyk7XHJcbiAgICAgIHJhbmdlLm1vdmVTdGFydCgnY2hhcmFjdGVyJywgcG9zKTtcclxuICAgICAgcmFuZ2Uuc2VsZWN0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRDYXJldCgpIHtcclxuICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIHRoaXMuY3Vyc29yUG9zaXRpb24pO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiYXggZm9ybS1pdGVtXCIgW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVkXCIgW2F0dHIuaWRdPVwidWlkXCIgI2ZjPlxyXG4gICAgPGRpdiBjbGFzcz1cImF4IGl0ZW1zLXdyYXBwZXJcIj5cclxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbc3RhcnRdXCI+XHJcbiAgICAgICAgPC9uZy1jb250ZW50PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiICNjb250ZW50PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJheCBmb3JtLWNvbnRyb2wgaW5wdXQge3tzaXplfX1cIiBbY2xhc3MuZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbY2xhc3MucmVhZG9ubHldPVwicmVhZG9ubHlcIiBbY2xhc3MuaWNvbl09XCJpY29uXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCAjaW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImF4IHt7c2l6ZX19XCIgW3RleHRNYXNrXT1cInRpbWVUeXBlXCIgWyhuZ01vZGVsKV09XCJ0ZXh0VmFsdWVcIiBwbGFjZWhvbGRlcj1cInt7cGxhY2Vob2xkZXJ9fVwiIFtyZWFkb25seV09XCJyZWFkb25seVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtuZ0NsYXNzXT1cInNldFRleHRBbGlnbigpXCIgW2NsYXNzLmNsZWFyXT1cInZhbHVlICYmIGFsbG93Q2xlYXJcIiAoZm9jdXMpPVwiaGFuZGxlSW5wdXRGb2N1cygpXCJcclxuICAgICAgICAgICAgICAgIChibHVyKT1cImhhbmRsZUlucHV0Qmx1cigkZXZlbnQpXCIgKGtleXByZXNzKT0naGFuZGxlS2V5UHJlc3MoJGV2ZW50KScgKGtleXVwKT1cImhhbmRsZUtleVVwKCRldmVudClcIiAoa2V5ZG93bik9XCJoYW5kbGVLZXlEb3duKCRldmVudClcIiAoY2xpY2spPVwiaGFuZGxlQ2xpY2soJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cInt7aWNvbn19XCIgKm5nSWY9XCJpY29uXCI+PC9pPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYXggaXRlbXMtd3JhcHBlclwiPlxyXG4gICAgICAgIDxheC1idXR0b24gKm5nSWY9XCJ2YWx1ZSAmJiBhbGxvd0NsZWFyXCIgaWNvbj1cImZhciBmYS10aW1lc1wiIHR5cGU9XCJkYW5nZXIgYmxhbmtcIiAoY2xpY2spPVwiY2xlYXIoKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFt0YWJJbmRleF09XCItMVwiPjwvYXgtYnV0dG9uPlxyXG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltlbmRdXCI+XHJcbiAgICAgICAgPC9uZy1jb250ZW50PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG48IS0tIFt0ZXh0TWFza109XCJ7bWFzazogbWFzayAsIHNob3dNYXNrOnNob3dNYXNrICwgZ3VpZDogbWFza0d1aWQgLCBrZWVwQ2hhclBvc2l0aW9uczogbWFza0tlZXBDaGFyUG9zaXRpb25zfVwiIC0tPlxyXG48IS0tIDxpbnB1dCAjaW5wdXQgaWQ9XCJ0aW1lUGlja2VyVmFsdWVcIiBbdGV4dE1hc2tdPVwidGltZVR5cGVcIiB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwidmFsdWVcIiAoa2V5cHJlc3MpPSdoYW5kbGVLZXlQcmVzcygkZXZlbnQpJ1xyXG4gICAgKGtleXVwKT1cImhhbmRsZUtleVVwKCRldmVudClcIiAoa2V5ZG93bik9XCJoYW5kbGVLZXlEb3duKCRldmVudClcIiAoY2xpY2spPVwiaGFuZGxlQ2xpY2soJGV2ZW50KVwiPiAtLT4iXX0=
1
+ import { Component, ChangeDetectorRef, ElementRef, Input, ChangeDetectionStrategy, EventEmitter, Output } from '@angular/core';
2
+ import { AXBaseTextComponent, AXValidatableComponent } from '../base/element.class';
3
+ import { AXValueEvent } from '../base/events.class';
4
+ import { AXTranslator } from '@acorex/core';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../button/button.component";
7
+ import * as i2 from "@angular/forms";
8
+ import * as i3 from "angular2-text-mask";
9
+ import * as i4 from "@angular/common";
10
+ export class AXTimePickerItemChangedEvent {
11
+ }
12
+ export class AXTimePickerChangedEvent extends AXValueEvent {
13
+ }
14
+ export class AXTimePickerComponent extends AXBaseTextComponent {
15
+ constructor(cdr, ref) {
16
+ super(cdr, ref);
17
+ this.cdr = cdr;
18
+ this.onValueChanged = new EventEmitter();
19
+ this.type = 'HHmm';
20
+ this.showCurentTime = false;
21
+ this.clearDisabled = true;
22
+ this.HHmmss = [/[0-2]/, /[0-9]/, ':', /[0-5]/, /[0-9]/, ':', /[0-5]/, /[0-9]/];
23
+ this.HHmm = [/[0-2]/, /[0-9]/, ':', /[0-5]/, /[0-9]/];
24
+ this.HH = [/[0-2]/, /[0-9]/];
25
+ this.hhmmss = [/[0-1]/, /[0-9]/, ':', /[0-5]/, /[0-9]/, ':', /[0-5]/, /[0-9]/];
26
+ this.hhmm = [/[0-1]/, /[0-9]/, ':', /[0-5]/, /[0-9]/];
27
+ this.hh = [/[0-1]/, /[0-9]/];
28
+ // TODO: apply am pm from locale
29
+ this.hhmmssam = [/[0-1]/, /[0-9]/, ':', /[0-5]/, /[0-9]/, ':', /[0-5]/, /[0-9]/, ' ', /[a|p|ق|ب]/, AXTranslator.get('dateTime.dayTime.m')];
30
+ this.hhmmam = [/[0-1]/, /[0-9]/, ':', /[0-5]/, /[0-9]/, ' ', /[a|p|ق|ب]/, AXTranslator.get('dateTime.dayTime.m')];
31
+ this.hham = [/[0-1]/, /[0-9]/, ' ', /[a|p|ق|ب]/, AXTranslator.get('dateTime.dayTime.m')];
32
+ this.textValue = '';
33
+ this.valueHam = '-- ' + AXTranslator.get('dateTime.dayTime.am');
34
+ this.valueMam = '--:-- ' + AXTranslator.get('dateTime.dayTime.am');
35
+ this.valueSam = '--:--:-- ' + AXTranslator.get('dateTime.dayTime.am');
36
+ this.cursorPosition = 0;
37
+ this.timeType = 'HHmm';
38
+ }
39
+ get value() {
40
+ return this._values;
41
+ }
42
+ set value(v) {
43
+ if (v === '' || v == null || v === '--:--:--' || v === '--:--' || v === '--' || v === this.valueSam || v === this.valueMam || v === this.valueHam) {
44
+ this.clearDisabled = false;
45
+ const old = this._values;
46
+ switch (this.type) {
47
+ case 'HHmmss':
48
+ this.textValue = '--:--:--';
49
+ break;
50
+ case 'HHmm':
51
+ this.textValue = '--:--';
52
+ break;
53
+ case 'HH':
54
+ this.textValue = '--';
55
+ break;
56
+ case 'hhmmss':
57
+ this.textValue = '--:--:--';
58
+ break;
59
+ case 'hhmm':
60
+ this.textValue = '--:--';
61
+ break;
62
+ case 'hh':
63
+ this.textValue = '--';
64
+ break;
65
+ case 'hhmmssam':
66
+ this.textValue = this.valueSam;
67
+ break;
68
+ case 'hhmmam':
69
+ this.textValue = this.valueMam;
70
+ break;
71
+ case 'hham':
72
+ this.textValue = this.valueHam;
73
+ break;
74
+ }
75
+ this._values = null;
76
+ if (v !== old) {
77
+ this.valueChange.emit(null);
78
+ this.onValueChanged.emit({
79
+ component: this,
80
+ value: { hour: null, minute: null, second: null, time: null },
81
+ oldValue: { time: old },
82
+ htmlElement: this.ref.nativeElement
83
+ });
84
+ }
85
+ }
86
+ else {
87
+ this.clearDisabled = true;
88
+ if (this._values && v) {
89
+ const old = this._values;
90
+ const ind1 = v.charAt(0);
91
+ const ind2 = v.charAt(1);
92
+ const ind3 = v.charAt(2);
93
+ const ind4 = v.charAt(3);
94
+ const ind5 = v.charAt(4);
95
+ const ind6 = v.charAt(5);
96
+ const ind7 = v.charAt(6);
97
+ const ind8 = v.charAt(7);
98
+ const ind9 = v.charAt(8);
99
+ const ind10 = v.charAt(9);
100
+ const indOld4 = old.charAt(9);
101
+ const indOld7 = old.charAt(9);
102
+ const indOld10 = old.charAt(9);
103
+ // handle hhmmssAm
104
+ if (ind1 === '-' && ind2 !== '-' && this.timeType.mask === this.hhmmssam) {
105
+ this.textValue = '0' + ind2 + ind3 + ind4 + ind5 + ind6 + ind7 + ind8 + ind9 + ind10 + AXTranslator.get('dateTime.dayTime.m');
106
+ setTimeout(() => {
107
+ this.setCaretPosition(this.input.nativeElement, 2);
108
+ this.cursorPosition = 2;
109
+ }, 0);
110
+ }
111
+ if (ind4 === '-' && ind5 !== '-' && this.timeType.mask === this.hhmmssam) {
112
+ this.textValue = ind1 + ind2 + ind3 + '0' + ind5 + ind6 + ind7 + ind8 + ind9 + ind10 + AXTranslator.get('dateTime.dayTime.m');
113
+ setTimeout(() => {
114
+ this.setCaretPosition(this.input.nativeElement, 5);
115
+ this.cursorPosition = 5;
116
+ }, 0);
117
+ }
118
+ if (ind7 === '-' && ind8 !== '-' && this.timeType.mask === this.hhmmssam) {
119
+ this.textValue = ind1 + ind2 + ind3 + ind4 + ind5 + ind6 + '0' + ind8 + ind9 + ind10 + AXTranslator.get('dateTime.dayTime.m');
120
+ setTimeout(() => {
121
+ this.setCaretPosition(this.input.nativeElement, 8);
122
+ this.cursorPosition = 8;
123
+ }, 0);
124
+ }
125
+ if (indOld10 === '-' && this.timeType.mask === this.hhmmssam) {
126
+ this.textValue = ind1 + ind2 + ind3 + ind4 + ind5 + ind6 + ind7 + ind8 + ind9 + AXTranslator.get('dateTime.dayTime.am');
127
+ }
128
+ //
129
+ if (ind1 === '-' && ind2 !== '-' && this.timeType.mask === this.hhmmam) {
130
+ this.textValue = '0' + ind2 + ind3 + ind4 + ind5 + ind6 + ind7 + AXTranslator.get('dateTime.dayTime.m');
131
+ setTimeout(() => {
132
+ this.setCaretPosition(this.input.nativeElement, 2);
133
+ this.cursorPosition = 2;
134
+ }, 0);
135
+ }
136
+ if (ind4 === '-' && ind5 !== '-' && this.timeType.mask === this.hhmmam) {
137
+ this.textValue = ind1 + ind2 + ind3 + '0' + ind5 + ind6 + ind7 + AXTranslator.get('dateTime.dayTime.m');
138
+ setTimeout(() => {
139
+ this.setCaretPosition(this.input.nativeElement, 5);
140
+ this.cursorPosition = 5;
141
+ }, 0);
142
+ }
143
+ if (indOld7 === '-' && this.timeType.mask === this.hhmmam) {
144
+ this.textValue = ind1 + ind2 + ind3 + ind4 + ind5 + ind6 + AXTranslator.get('dateTime.dayTime.am');
145
+ }
146
+ //
147
+ if (ind1 === '-' && ind2 !== '-' && this.timeType.mask === this.hham) {
148
+ this.textValue = '0' + ind2 + ind3 + ind4 + AXTranslator.get('dateTime.dayTime.m');
149
+ setTimeout(() => {
150
+ this.setCaretPosition(this.input.nativeElement, 2);
151
+ this.cursorPosition = 2;
152
+ }, 0);
153
+ }
154
+ if (indOld4 === '-' && this.timeType.mask === this.hham) {
155
+ this.textValue = ind1 + ind2 + ind3 + AXTranslator.get('dateTime.dayTime.am');
156
+ }
157
+ //
158
+ if (ind1 === '-' && ind2 !== '-' && (this.timeType.mask === this.hhmmss || this.timeType.mask === this.HHmmss)) {
159
+ this.textValue = '0' + ind2 + ind3 + ind4 + ind5 + ind6 + ind7 + ind8;
160
+ setTimeout(() => {
161
+ this.setCaretPosition(this.input.nativeElement, 2);
162
+ this.cursorPosition = 2;
163
+ }, 0);
164
+ }
165
+ if (ind4 === '-' && ind5 !== '-' && (this.timeType.mask === this.hhmmss || this.timeType.mask === this.HHmmss)) {
166
+ this.textValue = ind1 + ind2 + ind3 + '0' + ind5 + ind6 + ind7 + ind8;
167
+ setTimeout(() => {
168
+ this.setCaretPosition(this.input.nativeElement, 6);
169
+ this.cursorPosition = 6;
170
+ }, 0);
171
+ }
172
+ if (ind7 === '-' && ind8 !== '-' && (this.timeType.mask === this.hhmmss || this.timeType.mask === this.HHmmss)) {
173
+ this.textValue = ind1 + ind2 + ind3 + ind4 + ind5 + ind6 + '0' + ind8;
174
+ setTimeout(() => {
175
+ this.setCaretPosition(this.input.nativeElement, 9);
176
+ this.cursorPosition = 9;
177
+ }, 0);
178
+ }
179
+ //
180
+ if (ind1 === '-' && ind2 !== '-' && (this.timeType.mask === this.hhmm || this.timeType.mask === this.HHmm)) {
181
+ this.textValue = '0' + ind2 + ind3 + ind4 + ind5;
182
+ setTimeout(() => {
183
+ this.setCaretPosition(this.input.nativeElement, 2);
184
+ this.cursorPosition = 2;
185
+ }, 0);
186
+ }
187
+ if (ind4 === '-' && ind5 !== '-' && (this.timeType.mask === this.hhmm || this.timeType.mask === this.HHmm)) {
188
+ this.textValue = ind1 + ind2 + ind3 + '0' + ind5;
189
+ setTimeout(() => {
190
+ this.setCaretPosition(this.input.nativeElement, 5);
191
+ this.cursorPosition = 5;
192
+ }, 0);
193
+ }
194
+ //
195
+ if (ind1 === '-' && ind2 !== '-' && (this.timeType.mask === this.hh || this.timeType.mask === this.HH)) {
196
+ this.textValue = '0' + ind2;
197
+ setTimeout(() => {
198
+ this.setCaretPosition(this.input.nativeElement, 2);
199
+ this.cursorPosition = 2;
200
+ }, 0);
201
+ }
202
+ }
203
+ if (v !== this._values) {
204
+ const old = this._values;
205
+ this.textValue = v;
206
+ this._values = (v && v.indexOf('-') === -1) ? v : null;
207
+ if (v.indexOf('-') === -1) {
208
+ this.valueChange.emit(v);
209
+ this.onValueChanged.emit({
210
+ component: this,
211
+ value: {
212
+ time: v,
213
+ hour: Number(v[0] + v[1]),
214
+ minute: v[3] && v[3] !== AXTranslator.get('dateTime.dayTime.a') && v[3] !== AXTranslator.get('dateTime.dayTime.p') ? Number(v[3] + v[4]) : null,
215
+ second: v[6] && v[6] !== AXTranslator.get('dateTime.dayTime.a') && v[6] !== AXTranslator.get('dateTime.dayTime.p') ? Number(v[6] + v[7]) : null
216
+ },
217
+ oldValue: { time: old },
218
+ htmlElement: this.ref.nativeElement
219
+ });
220
+ this.cdr.detectChanges();
221
+ this.clearValidationStyle(this.input.nativeElement);
222
+ }
223
+ }
224
+ }
225
+ }
226
+ clearValue() {
227
+ this.clear();
228
+ this.handleInputFocus();
229
+ }
230
+ ngOnInit() {
231
+ switch (this.timeType) {
232
+ case 'HHmmss':
233
+ this.type = 'HHmmss';
234
+ this.timeType = {
235
+ guide: true,
236
+ showMask: true,
237
+ mask: this.HHmmss,
238
+ keepCharPositions: true,
239
+ placeholderChar: '-'
240
+ };
241
+ this.textValue = this.value ? this.value : '--:--:--';
242
+ break;
243
+ case 'HHmm':
244
+ this.type = 'HHmm';
245
+ this.timeType = {
246
+ guide: true,
247
+ showMask: true,
248
+ mask: this.HHmm,
249
+ keepCharPositions: true,
250
+ placeholderChar: '-'
251
+ };
252
+ this.textValue = this.value ? this.value : '--:--';
253
+ break;
254
+ case 'HH':
255
+ this.type = 'HH';
256
+ this.timeType = {
257
+ guide: true,
258
+ showMask: true,
259
+ mask: this.HH,
260
+ keepCharPositions: true,
261
+ placeholderChar: '-'
262
+ };
263
+ this.textValue = this.value ? this.value : '--';
264
+ break;
265
+ case 'hhmmss':
266
+ this.type = 'hhmmss';
267
+ this.timeType = {
268
+ guide: true,
269
+ showMask: true,
270
+ mask: this.hhmmss,
271
+ keepCharPositions: true,
272
+ placeholderChar: '-'
273
+ };
274
+ this.textValue = this.value ? this.value : '--:--:--';
275
+ break;
276
+ case 'hhmm':
277
+ this.type = 'hhmm';
278
+ this.timeType = {
279
+ guide: true,
280
+ showMask: true,
281
+ mask: this.hhmm,
282
+ keepCharPositions: true,
283
+ placeholderChar: '-'
284
+ };
285
+ this.textValue = this.value ? this.value : '--:--';
286
+ break;
287
+ case 'hh':
288
+ this.type = 'hh';
289
+ this.timeType = {
290
+ guide: true,
291
+ showMask: true,
292
+ mask: this.hh,
293
+ keepCharPositions: true,
294
+ placeholderChar: '-'
295
+ };
296
+ this.textValue = this.value ? this.value : '--';
297
+ break;
298
+ case 'hhmmssam':
299
+ this.type = 'hhmmssam';
300
+ this.timeType = {
301
+ guide: true,
302
+ showMask: true,
303
+ mask: this.hhmmssam,
304
+ keepCharPositions: true,
305
+ placeholderChar: '-'
306
+ };
307
+ this.textValue = this.value ? this.value : this.valueSam;
308
+ break;
309
+ case 'hhmmam':
310
+ this.type = 'hhmmam';
311
+ this.timeType = {
312
+ guide: true,
313
+ showMask: true,
314
+ mask: this.hhmmam,
315
+ keepCharPositions: true,
316
+ placeholderChar: '-'
317
+ };
318
+ this.textValue = this.value ? this.value : this.valueMam;
319
+ break;
320
+ case 'hham':
321
+ this.type = 'hham';
322
+ this.timeType = {
323
+ guide: true,
324
+ showMask: true,
325
+ mask: this.hham,
326
+ keepCharPositions: true,
327
+ placeholderChar: '-'
328
+ };
329
+ this.textValue = this.value ? this.value : this.valueHam;
330
+ break;
331
+ default:
332
+ this.type = 'HHmm';
333
+ this.timeType = {
334
+ guide: true,
335
+ showMask: true,
336
+ mask: this.HHmm,
337
+ keepCharPositions: true,
338
+ placeholderChar: '-'
339
+ };
340
+ this.textValue = this.value ? this.value : '--:--';
341
+ break;
342
+ }
343
+ if (this.showCurentTime === true) {
344
+ const hour = new Date().getHours() > 10 ? new Date().getHours() : '0' + new Date().getHours();
345
+ let amHour;
346
+ if (new Date().getHours() > 10) {
347
+ if (new Date().getHours() > 12) {
348
+ if (new Date().getHours() - 12 < 10) {
349
+ amHour = '0' + (new Date().getHours() - 12);
350
+ }
351
+ else {
352
+ amHour = new Date().getHours();
353
+ }
354
+ }
355
+ else {
356
+ amHour = new Date().getHours();
357
+ }
358
+ }
359
+ else {
360
+ amHour = '0' + new Date().getHours();
361
+ }
362
+ const min = new Date().getMinutes() > 9 ? new Date().getMinutes() : '0' + new Date().getMinutes();
363
+ const sec = new Date().getSeconds() > 9 ? new Date().getSeconds() : '0' + new Date().getSeconds();
364
+ if (this.type === 'hh' || this.type === 'hhmm' || this.type === 'hhmmss' || this.type === 'hhmmssam') {
365
+ if (hour >= 12) {
366
+ this.value = amHour + ':' + min + ':' + sec + ' ' + AXTranslator.get('dateTime.dayTime.pm');
367
+ }
368
+ else {
369
+ this.value = amHour + ':' + min + ':' + sec + ' ' + AXTranslator.get('dateTime.dayTime.am');
370
+ }
371
+ }
372
+ else if (this.type === 'hham') {
373
+ if (hour >= 12) {
374
+ this.value = amHour + ' ' + AXTranslator.get('dateTime.dayTime.pm');
375
+ }
376
+ else {
377
+ this.value = amHour + ' ' + AXTranslator.get('dateTime.dayTime.am');
378
+ }
379
+ }
380
+ else if (this.type === 'hhmmam') {
381
+ if (hour >= 12) {
382
+ this.value = amHour + ':' + min + ' ' + AXTranslator.get('dateTime.dayTime.pm');
383
+ }
384
+ else {
385
+ this.value = amHour + ':' + min + ' ' + AXTranslator.get('dateTime.dayTime.am');
386
+ }
387
+ }
388
+ else {
389
+ this.value = hour + ':' + min + ':' + sec;
390
+ }
391
+ }
392
+ }
393
+ onStartfocus() {
394
+ this.input.nativeElement.style.caretColor = 'transparent';
395
+ setTimeout(() => {
396
+ this.setCaretPosition(this.input.nativeElement, 0);
397
+ this.cursorPosition = 0;
398
+ this.input.nativeElement.style.caretColor = 'auto';
399
+ }, 0);
400
+ }
401
+ handleInputFocus() {
402
+ this.onStartfocus();
403
+ this.input.nativeElement.focus();
404
+ }
405
+ handleInputBlur(e) {
406
+ if (this.textValue.indexOf('-') !== -1) {
407
+ switch (this.type) {
408
+ case 'HHmmss':
409
+ this.textValue = '--:--:--';
410
+ break;
411
+ case 'HHmm':
412
+ this.textValue = '--:--';
413
+ break;
414
+ case 'HH':
415
+ this.textValue = '--';
416
+ break;
417
+ case 'hhmmss':
418
+ this.textValue = '--:--:--';
419
+ break;
420
+ case 'hhmm':
421
+ this.textValue = '--:--';
422
+ break;
423
+ case 'hh':
424
+ this.textValue = '--';
425
+ break;
426
+ case 'hhmmssam':
427
+ this.textValue = this.valueSam;
428
+ break;
429
+ case 'hhmmam':
430
+ this.textValue = this.valueMam;
431
+ break;
432
+ case 'hham':
433
+ this.textValue = this.valueHam;
434
+ break;
435
+ }
436
+ }
437
+ }
438
+ handleKeyPress(event) {
439
+ const inputChar = String.fromCharCode(event.charCode);
440
+ const firstChar = this.textValue.charAt(0);
441
+ const secondChar = this.textValue.charAt(1);
442
+ setTimeout(() => {
443
+ if (this.input.nativeElement.selectionStart || this.input.nativeElement.selectionStart === 0) {
444
+ this.cursorPosition = this.input.nativeElement.selectionStart;
445
+ // this.cursorPosition += 1 ;
446
+ }
447
+ }, 0);
448
+ if (firstChar === '2') {
449
+ if (secondChar === '' || this.textValue.charAt(1) >= '4' || this.cursorPosition < 3) {
450
+ if (inputChar >= '4') {
451
+ event.preventDefault();
452
+ }
453
+ }
454
+ }
455
+ if (this.timeType.mask === this.hhmmss ||
456
+ this.timeType.mask === this.hhmm ||
457
+ this.timeType.mask === this.hh ||
458
+ this.timeType.mask === this.hhmmssam ||
459
+ this.timeType.mask === this.hhmmam ||
460
+ this.timeType.mask === this.hham) {
461
+ if (firstChar === '1') {
462
+ if (secondChar === '' || this.textValue.charAt(1) >= '3' || this.cursorPosition < 3) {
463
+ if (inputChar >= '3') {
464
+ event.preventDefault();
465
+ }
466
+ }
467
+ }
468
+ }
469
+ if (inputChar === '-') {
470
+ event.preventDefault();
471
+ }
472
+ }
473
+ handleKeyUp(event) {
474
+ if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
475
+ this.input.nativeElement.style.caretColor = 'auto';
476
+ event.preventDefault();
477
+ event.stopPropagation();
478
+ }
479
+ // up & down button
480
+ if (event.key === 'ArrowUp') {
481
+ this.setCaret();
482
+ }
483
+ if (event.key === 'ArrowDown') {
484
+ this.setCaret();
485
+ }
486
+ if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
487
+ event.preventDefault();
488
+ return false;
489
+ }
490
+ // left & right Button
491
+ if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {
492
+ if (this.input.nativeElement.selectionStart || this.input.nativeElement.selectionStart === 0) {
493
+ this.cursorPosition = this.input.nativeElement.selectionStart;
494
+ }
495
+ }
496
+ // home button
497
+ if (event.key === 'Home') {
498
+ this.cursorPosition = 0;
499
+ }
500
+ // end button
501
+ if (event.key === 'End') {
502
+ if (this.timeType.mask === this.hhmmssam || this.timeType.mask === this.hhmmam || this.timeType.mask === this.hham) {
503
+ if (this.timeType.mask === this.hhmmssam) {
504
+ this.cursorPosition = 9;
505
+ setTimeout(() => {
506
+ this.setCaretPosition(this.input.nativeElement, this.cursorPosition);
507
+ this.input.nativeElement.style.caretColor = 'auto';
508
+ }, 0);
509
+ }
510
+ if (this.timeType.mask === this.hhmmam) {
511
+ this.cursorPosition = 6;
512
+ setTimeout(() => {
513
+ this.setCaretPosition(this.input.nativeElement, this.cursorPosition);
514
+ this.input.nativeElement.style.caretColor = 'auto';
515
+ }, 0);
516
+ }
517
+ if (this.timeType.mask === this.hham) {
518
+ this.cursorPosition = 3;
519
+ setTimeout(() => {
520
+ this.setCaretPosition(this.input.nativeElement, this.cursorPosition);
521
+ this.input.nativeElement.style.caretColor = 'auto';
522
+ }, 0);
523
+ }
524
+ }
525
+ else {
526
+ this.cursorPosition = this.textValue.length;
527
+ }
528
+ }
529
+ // backspace Control
530
+ if (event.key === 'Backspace') {
531
+ const ind1 = this.textValue.charAt(0);
532
+ const ind2 = this.textValue.charAt(1);
533
+ const ind3 = this.textValue.charAt(2);
534
+ const ind4 = this.textValue.charAt(3);
535
+ const ind5 = this.textValue.charAt(4);
536
+ const ind6 = this.textValue.charAt(5);
537
+ const ind7 = this.textValue.charAt(6);
538
+ const ind8 = this.textValue.charAt(7);
539
+ const ind9 = this.textValue.charAt(8);
540
+ const ind10 = this.textValue.charAt(9);
541
+ if (this.timeType.mask === this.hhmmssam) {
542
+ if (ind10 === '-') {
543
+ this.textValue = ind1 + ind2 + ind3 + ind4 + ind5 + ind6 + ind7 + ind8 + ind9 + AXTranslator.get('dateTime.dayTime.am');
544
+ setTimeout(() => {
545
+ this.setCaretPosition(this.input.nativeElement, 0);
546
+ this.cursorPosition = 0;
547
+ }, 0);
548
+ }
549
+ }
550
+ if (this.timeType.mask === this.hhmmam) {
551
+ if (ind7 === '-') {
552
+ this.textValue = ind1 + ind2 + ind3 + ind4 + ind5 + ind6 + AXTranslator.get('dateTime.dayTime.am');
553
+ setTimeout(() => {
554
+ this.setCaretPosition(this.input.nativeElement, 0);
555
+ this.cursorPosition = 0;
556
+ }, 0);
557
+ }
558
+ }
559
+ if (this.timeType.mask === this.hham) {
560
+ if (ind4 === '-') {
561
+ this.textValue = ind1 + ind2 + ind3 + AXTranslator.get('dateTime.dayTime.am');
562
+ setTimeout(() => {
563
+ this.setCaretPosition(this.input.nativeElement, 0);
564
+ this.cursorPosition = 0;
565
+ }, 0);
566
+ }
567
+ }
568
+ if (this.textValue.length <= 0) {
569
+ this.cursorPosition = 0;
570
+ }
571
+ else {
572
+ this.cursorPosition -= 1;
573
+ }
574
+ }
575
+ }
576
+ handleKeyDown(event) {
577
+ if (event.key === 'End') {
578
+ if (this.timeType.mask === this.hhmmssam || this.timeType.mask === this.hhmmam || this.timeType.mask === this.hham) {
579
+ this.input.nativeElement.style.caretColor = 'transparent';
580
+ }
581
+ else {
582
+ this.input.nativeElement.style.caretColor = 'auto';
583
+ }
584
+ }
585
+ let newValue = this.textValue;
586
+ const ind1 = newValue.charAt(0);
587
+ const ind2 = newValue.charAt(1);
588
+ const ind3 = this.textValue.charAt(2);
589
+ const ind4 = this.textValue.charAt(3);
590
+ const ind5 = this.textValue.charAt(4);
591
+ const ind6 = this.textValue.charAt(5);
592
+ const ind7 = this.textValue.charAt(6);
593
+ const ind8 = this.textValue.charAt(7);
594
+ const ind9 = this.textValue.charAt(8);
595
+ const ind10 = this.textValue.charAt(9);
596
+ const ind11 = this.textValue.charAt(10);
597
+ // up key
598
+ if (event.key === 'ArrowUp') {
599
+ // hour
600
+ if (this.cursorPosition <= 2) {
601
+ const hourind = ind1 + ind2;
602
+ const newHour = +hourind + 1;
603
+ newValue = newHour.toString();
604
+ if (this.timeType.mask === this.hhmmss ||
605
+ this.timeType.mask === this.hhmm ||
606
+ this.timeType.mask === this.hh ||
607
+ this.timeType.mask === this.hhmmssam ||
608
+ this.timeType.mask === this.hhmmam ||
609
+ this.timeType.mask === this.hham) {
610
+ if (hourind === '--') {
611
+ newValue = '0';
612
+ }
613
+ if (ind1 !== '-' && hourind === ind1 + '-') {
614
+ newValue = '0';
615
+ }
616
+ if (ind2 !== '-' && hourind === '-' + ind2) {
617
+ newValue = '0';
618
+ }
619
+ if (+newValue > 12) {
620
+ newValue = '01';
621
+ }
622
+ else if (+newValue < 10) {
623
+ newValue = '0' + newValue;
624
+ }
625
+ }
626
+ else {
627
+ if (hourind === '--') {
628
+ newValue = '0';
629
+ }
630
+ if (ind1 !== '-' && hourind === ind1 + '-') {
631
+ newValue = '0';
632
+ }
633
+ if (ind2 !== '-' && hourind === '-' + ind2) {
634
+ newValue = '0';
635
+ }
636
+ if (+newValue > 23) {
637
+ newValue = '00';
638
+ }
639
+ else if (+newValue < 10) {
640
+ newValue = '0' + newValue;
641
+ }
642
+ }
643
+ const afterHourind = ind3 + ind4 + ind5 + ind6 + ind7 + ind8 + ind9 + ind10 + ind11;
644
+ const hour = newValue.toString() + afterHourind;
645
+ this.textValue = hour;
646
+ }
647
+ // minute
648
+ if (this.cursorPosition >= 3 && this.cursorPosition <= 5) {
649
+ const hourind = ind4 + ind5;
650
+ const newHour = +hourind + 1;
651
+ newValue = newHour.toString();
652
+ if (hourind === '--') {
653
+ newValue = '0';
654
+ }
655
+ if (ind4 !== '-' && hourind === ind4 + '-') {
656
+ newValue = '0';
657
+ }
658
+ if (ind5 !== '-' && hourind === '-' + ind5) {
659
+ newValue = '0';
660
+ }
661
+ if (+newValue > 59) {
662
+ newValue = '00';
663
+ }
664
+ else if (+newValue < 10) {
665
+ newValue = '0' + newValue;
666
+ }
667
+ const beforeHourind = ind1 + ind2 + ind3;
668
+ const afterHourind = ind6 + ind7 + ind8 + ind9 + ind10 + ind11;
669
+ const minute = beforeHourind + newValue.toString() + afterHourind;
670
+ this.textValue = minute;
671
+ }
672
+ // second
673
+ if (this.cursorPosition >= 6 && this.cursorPosition <= 8) {
674
+ const secondind = ind7 + ind8;
675
+ const newSecond = +secondind + 1;
676
+ newValue = newSecond.toString();
677
+ if (secondind === '--') {
678
+ newValue = '0';
679
+ }
680
+ if (ind7 !== '-' && secondind === ind7 + '-') {
681
+ newValue = '0';
682
+ }
683
+ if (ind8 !== '-' && secondind === '-' + ind8) {
684
+ newValue = '0';
685
+ }
686
+ if (+newValue > 59) {
687
+ newValue = '00';
688
+ }
689
+ else if (+newValue < 10) {
690
+ newValue = '0' + newValue;
691
+ }
692
+ const beforeHourind = ind1 + ind2 + ind3 + ind4 + ind5 + ind6;
693
+ const afterHourind = ind9 + ind10 + ind11;
694
+ const second = beforeHourind + newValue.toString() + afterHourind;
695
+ this.textValue = second;
696
+ }
697
+ // type am/PM
698
+ if (this.timeType.mask === this.hhmmssam) {
699
+ if (this.cursorPosition > 8) {
700
+ let typeind = ind10.toString();
701
+ const beforeHourind = ind1 + ind2 + ind3 + ind4 + ind5 + ind6 + ind7 + ind8 + ind9;
702
+ const afterHourind = ind11;
703
+ if (ind10 === AXTranslator.get('dateTime.dayTime.p')) {
704
+ typeind = AXTranslator.get('dateTime.dayTime.a');
705
+ }
706
+ else if (ind10 === AXTranslator.get('dateTime.dayTime.a')) {
707
+ typeind = AXTranslator.get('dateTime.dayTime.p');
708
+ }
709
+ this.textValue = beforeHourind + typeind + afterHourind;
710
+ }
711
+ }
712
+ if (this.timeType.mask === this.hhmmam) {
713
+ if (this.cursorPosition >= 6) {
714
+ let typeind = ind7.toString();
715
+ const beforeHourind = ind1 + ind2 + ind3 + ind4 + ind5 + ind6;
716
+ const afterHourind = ind8;
717
+ if (ind7 === AXTranslator.get('dateTime.dayTime.p')) {
718
+ typeind = AXTranslator.get('dateTime.dayTime.a');
719
+ }
720
+ else if (ind7 === AXTranslator.get('dateTime.dayTime.a')) {
721
+ typeind = AXTranslator.get('dateTime.dayTime.p');
722
+ }
723
+ this.textValue = beforeHourind + typeind + afterHourind;
724
+ }
725
+ }
726
+ if (this.timeType.mask === this.hham) {
727
+ if (this.cursorPosition >= 3) {
728
+ let typeind2 = ind4.toString();
729
+ const beforeHourind = ind1 + ind2 + ind3;
730
+ const afterHourind = ind5;
731
+ if (ind4 === AXTranslator.get('dateTime.dayTime.p')) {
732
+ typeind2 = AXTranslator.get('dateTime.dayTime.a');
733
+ }
734
+ else if (ind4 === AXTranslator.get('dateTime.dayTime.a')) {
735
+ typeind2 = AXTranslator.get('dateTime.dayTime.p');
736
+ }
737
+ this.textValue = beforeHourind + typeind2 + afterHourind;
738
+ }
739
+ }
740
+ }
741
+ // key down
742
+ if (event.key === 'ArrowDown') {
743
+ // hour
744
+ if (this.cursorPosition <= 2) {
745
+ const hourind = ind1 + ind2;
746
+ const newHour = +hourind - 1;
747
+ newValue = newHour.toString();
748
+ if (this.timeType.mask === this.hhmmss ||
749
+ this.timeType.mask === this.hhmm ||
750
+ this.timeType.mask === this.hh ||
751
+ this.timeType.mask === this.hhmmssam ||
752
+ this.timeType.mask === this.hhmmam ||
753
+ this.timeType.mask === this.hham) {
754
+ if (hourind === '--') {
755
+ newValue = '0';
756
+ }
757
+ if (ind1 !== '-' && hourind === ind1 + '-') {
758
+ newValue = '0';
759
+ }
760
+ if (ind2 !== '-' && hourind === '-' + ind2) {
761
+ newValue = '0';
762
+ }
763
+ if (+newValue < 1) {
764
+ newValue = '12';
765
+ }
766
+ else if (+newValue < 10) {
767
+ newValue = '0' + newValue;
768
+ }
769
+ }
770
+ else {
771
+ if (hourind === '--') {
772
+ newValue = '0';
773
+ }
774
+ if (ind1 !== '-' && hourind === ind1 + '-') {
775
+ newValue = '0';
776
+ }
777
+ if (ind2 !== '-' && hourind === '-' + ind2) {
778
+ newValue = '0';
779
+ }
780
+ if (+newValue < 0) {
781
+ newValue = '23';
782
+ }
783
+ else if (+newValue < 10) {
784
+ newValue = '0' + newValue;
785
+ }
786
+ }
787
+ const afterHourIndex = ind3 + ind4 + ind5 + ind6 + ind7 + ind8 + ind9 + ind10 + ind11;
788
+ const hour = newValue.toString() + afterHourIndex;
789
+ this.textValue = hour;
790
+ }
791
+ // minute
792
+ if (this.cursorPosition >= 3 && this.cursorPosition <= 5) {
793
+ const minuteind = ind4 + ind5;
794
+ const newMinute = +minuteind - 1;
795
+ newValue = newMinute.toString();
796
+ if (minuteind === '--') {
797
+ newValue = '0';
798
+ }
799
+ if (ind4 !== '-' && minuteind === ind4 + '-') {
800
+ newValue = '0';
801
+ }
802
+ if (ind5 !== '-' && minuteind === '-' + ind5) {
803
+ newValue = '0';
804
+ }
805
+ if (minuteind === '--') {
806
+ newValue = '0';
807
+ }
808
+ if (+newValue < 0) {
809
+ newValue = '59';
810
+ }
811
+ else if (+newValue < 10) {
812
+ newValue = '0' + newValue;
813
+ }
814
+ const beforeMinuteIndex = ind1 + ind2 + ind3;
815
+ const afterMinuteIndex = ind6 + ind7 + ind8 + ind9 + ind10 + ind11;
816
+ const minute = beforeMinuteIndex + newValue.toString() + afterMinuteIndex;
817
+ this.textValue = minute;
818
+ }
819
+ // second
820
+ if (this.cursorPosition >= 6 && this.cursorPosition <= 8) {
821
+ const secondIndex = ind7 + ind8;
822
+ const newSecond = +secondIndex - 1;
823
+ newValue = newSecond.toString();
824
+ if (secondIndex === '--') {
825
+ newValue = '0';
826
+ }
827
+ if (ind7 !== '-' && secondIndex === ind7 + '-') {
828
+ newValue = '0';
829
+ }
830
+ if (ind8 !== '-' && secondIndex === '-' + ind8) {
831
+ newValue = '0';
832
+ }
833
+ if (secondIndex === '--') {
834
+ newValue = '0';
835
+ }
836
+ if (+newValue < 0) {
837
+ newValue = '59';
838
+ }
839
+ else if (+newValue < 10) {
840
+ newValue = '0' + newValue;
841
+ }
842
+ const beforesecondIndex = ind1 + ind2 + ind3 + ind4 + ind5 + ind6;
843
+ const aftersecondIndex = ind9 + ind10 + ind11;
844
+ const second = beforesecondIndex + newValue.toString() + aftersecondIndex;
845
+ this.textValue = second;
846
+ }
847
+ // type
848
+ if (this.timeType.mask === this.hhmmssam) {
849
+ if (this.cursorPosition > 8) {
850
+ let typeind = ind10.toString();
851
+ const beforeHourind = ind1 + ind2 + ind3 + ind4 + ind5 + ind6 + ind7 + ind8 + ind9;
852
+ const afterHourind = ind11;
853
+ if (ind10 === AXTranslator.get('dateTime.dayTime.p')) {
854
+ typeind = AXTranslator.get('dateTime.dayTime.a');
855
+ }
856
+ else if (ind10 === AXTranslator.get('dateTime.dayTime.a')) {
857
+ typeind = AXTranslator.get('dateTime.dayTime.p');
858
+ }
859
+ this.textValue = beforeHourind + typeind + afterHourind;
860
+ }
861
+ }
862
+ if (this.timeType.mask === this.hhmmam) {
863
+ if (this.cursorPosition >= 6) {
864
+ let typeind = ind7.toString();
865
+ const beforeHourind = ind1 + ind2 + ind3 + ind4 + ind5 + ind6;
866
+ const afterHourind = ind8;
867
+ if (ind7 === AXTranslator.get('dateTime.dayTime.p')) {
868
+ typeind = AXTranslator.get('dateTime.dayTime.a');
869
+ }
870
+ else if (ind7 === AXTranslator.get('dateTime.dayTime.a')) {
871
+ typeind = AXTranslator.get('dateTime.dayTime.p');
872
+ }
873
+ this.textValue = beforeHourind + typeind + afterHourind;
874
+ }
875
+ }
876
+ if (this.timeType.mask === this.hham) {
877
+ if (this.cursorPosition >= 3) {
878
+ let typeind2 = ind4.toString();
879
+ const beforeHourind = ind1 + ind2 + ind3;
880
+ const afterHourind = ind5;
881
+ //TO DO this is wrong check index
882
+ if (ind4 === AXTranslator.get('dateTime.dayTime.p')) {
883
+ typeind2 = AXTranslator.get('dateTime.dayTime.a');
884
+ }
885
+ else if (ind4 === AXTranslator.get('dateTime.dayTime.a')) {
886
+ typeind2 = AXTranslator.get('dateTime.dayTime.p');
887
+ }
888
+ this.textValue = beforeHourind + typeind2 + afterHourind;
889
+ }
890
+ }
891
+ }
892
+ if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
893
+ this.input.nativeElement.style.caretColor = 'transparent';
894
+ event.preventDefault();
895
+ event.stopPropagation();
896
+ return false;
897
+ }
898
+ if (event.key === 'Delete') {
899
+ event.preventDefault();
900
+ }
901
+ }
902
+ handleClick(event) {
903
+ if (this.input.nativeElement.selectionStart || this.input.nativeElement.selectionStart === 0) {
904
+ this.cursorPosition = this.input.nativeElement.selectionStart;
905
+ }
906
+ }
907
+ doGetCaretPosition(ctrl) {
908
+ let CaretPos = 0;
909
+ if (ctrl.selectionStart || ctrl.selectionStart === 0) {
910
+ CaretPos = ctrl.selectionStart;
911
+ return CaretPos;
912
+ }
913
+ }
914
+ setCaretPosition(ctrl, pos) {
915
+ if (ctrl.setSelectionRange) {
916
+ ctrl.focus();
917
+ ctrl.setSelectionRange(pos, pos);
918
+ }
919
+ else if (ctrl.createTextRange) {
920
+ const range = ctrl.createTextRange();
921
+ range.collapse(true);
922
+ range.moveEnd('character', pos);
923
+ range.moveStart('character', pos);
924
+ range.select();
925
+ }
926
+ }
927
+ setCaret() {
928
+ this.setCaretPosition(this.input.nativeElement, this.cursorPosition);
929
+ }
930
+ }
931
+ AXTimePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AXTimePickerComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
932
+ AXTimePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: AXTimePickerComponent, selector: "ax-time-picker", inputs: { timeType: "timeType", showCurentTime: "showCurentTime" }, outputs: { onValueChanged: "onValueChanged" }, host: { styleAttribute: "width: 100%" }, providers: [{ provide: AXValidatableComponent, useExisting: AXTimePickerComponent }], usesInheritance: true, ngImport: i0, template: "<div class=\"ax form-item\" [class.disabled]=\"disabled\" [attr.id]=\"uid\" #fc>\n <div class=\"ax items-wrapper\">\n <ng-content select=\"[start]\">\n </ng-content>\n </div>\n <div class=\"content\" #content>\n <div class=\"ax form-control input {{size}}\" [class.disabled]=\"disabled\" [class.readonly]=\"readonly\" [class.icon]=\"icon\">\n <input #input type=\"text\" class=\"ax {{size}}\" [textMask]=\"timeType\" [(ngModel)]=\"textValue\" placeholder=\"{{placeholder}}\" [readonly]=\"readonly\" [disabled]=\"disabled\" [ngClass]=\"setTextAlign()\" [class.clear]=\"value && allowClear\" (focus)=\"handleInputFocus()\"\n (blur)=\"handleInputBlur($event)\" (keypress)='handleKeyPress($event)' (keyup)=\"handleKeyUp($event)\" (keydown)=\"handleKeyDown($event)\" (click)=\"handleClick($event)\">\n <i class=\"{{icon}}\" *ngIf=\"icon\"></i>\n </div>\n </div>\n <div class=\"ax items-wrapper\">\n <ax-button *ngIf=\"value && allowClear\" icon=\"far fa-times\" type=\"danger blank\" (click)=\"clear()\" [disabled]=\"disabled\" [tabIndex]=\"-1\"></ax-button>\n <ng-content select=\"[end]\">\n </ng-content>\n </div>\n</div>\n<!-- [textMask]=\"{mask: mask , showMask:showMask , guid: maskGuid , keepCharPositions: maskKeepCharPositions}\" -->\n<!-- <input #input id=\"timePickerValue\" [textMask]=\"timeType\" type=\"text\" [(ngModel)]=\"value\" (keypress)='handleKeyPress($event)'\n (keyup)=\"handleKeyUp($event)\" (keydown)=\"handleKeyDown($event)\" (click)=\"handleClick($event)\"> -->", components: [{ type: i1.AXButtonComponent, selector: "ax-button", inputs: ["type", "icon", "submitBehavior", "cancelBehavior", "block", "loading", "selected"] }], directives: [{ type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.MaskedInputDirective, selector: "[textMask]", inputs: ["textMask"], exportAs: ["textMask"] }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
933
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AXTimePickerComponent, decorators: [{
934
+ type: Component,
935
+ args: [{ selector: 'ax-time-picker', changeDetection: ChangeDetectionStrategy.OnPush, host: { style: 'width: 100%' }, providers: [{ provide: AXValidatableComponent, useExisting: AXTimePickerComponent }], template: "<div class=\"ax form-item\" [class.disabled]=\"disabled\" [attr.id]=\"uid\" #fc>\n <div class=\"ax items-wrapper\">\n <ng-content select=\"[start]\">\n </ng-content>\n </div>\n <div class=\"content\" #content>\n <div class=\"ax form-control input {{size}}\" [class.disabled]=\"disabled\" [class.readonly]=\"readonly\" [class.icon]=\"icon\">\n <input #input type=\"text\" class=\"ax {{size}}\" [textMask]=\"timeType\" [(ngModel)]=\"textValue\" placeholder=\"{{placeholder}}\" [readonly]=\"readonly\" [disabled]=\"disabled\" [ngClass]=\"setTextAlign()\" [class.clear]=\"value && allowClear\" (focus)=\"handleInputFocus()\"\n (blur)=\"handleInputBlur($event)\" (keypress)='handleKeyPress($event)' (keyup)=\"handleKeyUp($event)\" (keydown)=\"handleKeyDown($event)\" (click)=\"handleClick($event)\">\n <i class=\"{{icon}}\" *ngIf=\"icon\"></i>\n </div>\n </div>\n <div class=\"ax items-wrapper\">\n <ax-button *ngIf=\"value && allowClear\" icon=\"far fa-times\" type=\"danger blank\" (click)=\"clear()\" [disabled]=\"disabled\" [tabIndex]=\"-1\"></ax-button>\n <ng-content select=\"[end]\">\n </ng-content>\n </div>\n</div>\n<!-- [textMask]=\"{mask: mask , showMask:showMask , guid: maskGuid , keepCharPositions: maskKeepCharPositions}\" -->\n<!-- <input #input id=\"timePickerValue\" [textMask]=\"timeType\" type=\"text\" [(ngModel)]=\"value\" (keypress)='handleKeyPress($event)'\n (keyup)=\"handleKeyUp($event)\" (keydown)=\"handleKeyDown($event)\" (click)=\"handleClick($event)\"> -->" }]
936
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { onValueChanged: [{
937
+ type: Output
938
+ }], timeType: [{
939
+ type: Input
940
+ }], showCurentTime: [{
941
+ type: Input
942
+ }] } });
943
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNvcmV4L2NvbXBvbmVudHMvc3JjL2xpYi90aW1lLXBpY2tlci90aW1lLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY29yZXgvY29tcG9uZW50cy9zcmMvbGliL3RpbWUtcGlja2VyL3RpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDVixLQUFLLEVBRUwsdUJBQXVCLEVBQ3ZCLFlBQVksRUFDWixNQUFNLEVBR1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFcEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7OztBQUU1QyxNQUFNLE9BQU8sNEJBQTRCO0NBTXhDO0FBQ0QsTUFBTSxPQUFPLHdCQUF5QixTQUFRLFlBQTBDO0NBQUk7QUFTNUYsTUFBTSxPQUFPLHFCQUFzQixTQUFRLG1CQUFtQjtJQXdPNUQsWUFBc0IsR0FBc0IsRUFBRSxHQUFlO1FBQzNELEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFESSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQXRPNUMsbUJBQWMsR0FBMkMsSUFBSSxZQUFZLEVBQTRCLENBQUM7UUFTdEcsU0FBSSxHQUFXLE1BQU0sQ0FBQztRQUV0QixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUVoQyxrQkFBYSxHQUFZLElBQUksQ0FBQztRQUM5QixXQUFNLEdBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDL0UsU0FBSSxHQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RELE9BQUUsR0FBUSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM3QixXQUFNLEdBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDL0UsU0FBSSxHQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RELE9BQUUsR0FBUSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM3QixnQ0FBZ0M7UUFDaEMsYUFBUSxHQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO1FBQzNJLFdBQU0sR0FBUSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztRQUNsSCxTQUFJLEdBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7UUFDekYsY0FBUyxHQUFXLEVBQUUsQ0FBQztRQUV2QixhQUFRLEdBQVcsS0FBSyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNuRSxhQUFRLEdBQVcsUUFBUSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN0RSxhQUFRLEdBQVcsV0FBVyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQXdNekUsbUJBQWMsR0FBVyxDQUFDLENBQUM7UUFLekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7SUFDekIsQ0FBQztJQTFNRCxJQUFXLEtBQUs7UUFDZCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUNELElBQVcsS0FBSyxDQUFDLENBQVM7UUFDeEIsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLFVBQVUsSUFBSSxDQUFDLEtBQUssT0FBTyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakosSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFFM0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUN6QixRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ2pCLEtBQUssUUFBUTtvQkFDWCxJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQztvQkFDNUIsTUFBTTtnQkFDUixLQUFLLE1BQU07b0JBQ1QsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUM7b0JBQ3pCLE1BQU07Z0JBQ1IsS0FBSyxJQUFJO29CQUNQLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO29CQUN0QixNQUFNO2dCQUNSLEtBQUssUUFBUTtvQkFDWCxJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQztvQkFDNUIsTUFBTTtnQkFDUixLQUFLLE1BQU07b0JBQ1QsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUM7b0JBQ3pCLE1BQU07Z0JBQ1IsS0FBSyxJQUFJO29CQUNQLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO29CQUN0QixNQUFNO2dCQUNSLEtBQUssVUFBVTtvQkFDYixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7b0JBQy9CLE1BQU07Z0JBQ1IsS0FBSyxRQUFRO29CQUNYLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztvQkFDL0IsTUFBTTtnQkFDUixLQUFLLE1BQU07b0JBQ1QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO29CQUMvQixNQUFNO2FBQ1Q7WUFFRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO29CQUN2QixTQUFTLEVBQUUsSUFBSTtvQkFDZixLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO29CQUM3RCxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFO29CQUN2QixXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhO2lCQUNwQyxDQUFDLENBQUM7YUFDSjtTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztZQUMxQixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxFQUFFO2dCQUNyQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUN6QixNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUUxQixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM5QixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM5QixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUUvQixrQkFBa0I7Z0JBQ2xCLElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUU7b0JBQ3hFLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztvQkFDOUgsVUFBVSxDQUFDLEdBQUcsRUFBRTt3QkFDZCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ25ELElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO29CQUMxQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ1A7Z0JBQ0QsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRTtvQkFDeEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO29CQUM5SCxVQUFVLENBQUMsR0FBRyxFQUFFO3dCQUNkLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDbkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7b0JBQzFCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDUDtnQkFDRCxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFO29CQUN4RSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7b0JBQzlILFVBQVUsQ0FBQyxHQUFHLEVBQUU7d0JBQ2QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUNuRCxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztvQkFDMUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNQO2dCQUNELElBQUksUUFBUSxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFO29CQUM1RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztpQkFDekg7Z0JBRUQsRUFBRTtnQkFDRixJQUFJLElBQUksS0FBSyxHQUFHLElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFO29CQUN0RSxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7b0JBQ3hHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7d0JBQ2QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUNuRCxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztvQkFDMUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNQO2dCQUNELElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUU7b0JBQ3RFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztvQkFDeEcsVUFBVSxDQUFDLEdBQUcsRUFBRTt3QkFDZCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ25ELElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO29CQUMxQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ1A7Z0JBQ0QsSUFBSSxPQUFPLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUU7b0JBQ3pELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2lCQUNwRztnQkFFRCxFQUFFO2dCQUNGLElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEVBQUU7b0JBQ3BFLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztvQkFDbkYsVUFBVSxDQUFDLEdBQUcsRUFBRTt3QkFDZCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ25ELElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO29CQUMxQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ1A7Z0JBQ0QsSUFBSSxPQUFPLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEVBQUU7b0JBQ3ZELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2lCQUMvRTtnQkFFRCxFQUFFO2dCQUNGLElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQzlHLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztvQkFDdEUsVUFBVSxDQUFDLEdBQUcsRUFBRTt3QkFDZCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ25ELElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO29CQUMxQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ1A7Z0JBQ0QsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDOUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO29CQUN0RSxVQUFVLENBQUMsR0FBRyxFQUFFO3dCQUNkLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDbkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7b0JBQzFCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDUDtnQkFDRCxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUM5RyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7b0JBQ3RFLFVBQVUsQ0FBQyxHQUFHLEVBQUU7d0JBQ2QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUNuRCxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztvQkFDMUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNQO2dCQUVELEVBQUU7Z0JBQ0YsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDMUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO29CQUNqRCxVQUFVLENBQUMsR0FBRyxFQUFFO3dCQUNkLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDbkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7b0JBQzFCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDUDtnQkFDRCxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUMxRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7b0JBQ2pELFVBQVUsQ0FBQyxHQUFHLEVBQUU7d0JBQ2QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUNuRCxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztvQkFDMUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNQO2dCQUVELEVBQUU7Z0JBQ0YsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtvQkFDdEcsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO29CQUM1QixVQUFVLENBQUMsR0FBRyxFQUFFO3dCQUNkLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDbkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7b0JBQzFCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDUDthQUNGO1lBQ0QsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDdEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztnQkFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDdkQsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO29CQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7d0JBQ3ZCLFNBQVMsRUFBRSxJQUFJO3dCQUNmLEtBQUssRUFBRTs0QkFDTCxJQUFJLEVBQUUsQ0FBQzs0QkFDUCxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ3pCLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFlBQVksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssWUFBWSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJOzRCQUMvSSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxZQUFZLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFlBQVksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTt5QkFDaEo7d0JBQ0QsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTt3QkFDdkIsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYTtxQkFDcEMsQ0FBQyxDQUFDO29CQUNILElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2lCQUNyRDthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBU0QsVUFBVTtRQUNSLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxRQUFRO1FBQ04sUUFBUSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ3JCLEtBQUssUUFBUTtnQkFDWCxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQztnQkFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRztvQkFDZCxLQUFLLEVBQUUsSUFBSTtvQkFDWCxRQUFRLEVBQUUsSUFBSTtvQkFDZCxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU07b0JBQ2pCLGlCQUFpQixFQUFFLElBQUk7b0JBQ3ZCLGVBQWUsRUFBRSxHQUFHO2lCQUNyQixDQUFDO2dCQUNGLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO2dCQUN0RCxNQUFNO1lBQ1IsS0FBSyxNQUFNO2dCQUNULElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO2dCQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHO29CQUNkLEtBQUssRUFBRSxJQUFJO29CQUNYLFFBQVEsRUFBRSxJQUFJO29CQUNkLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtvQkFDZixpQkFBaUIsRUFBRSxJQUFJO29CQUN2QixlQUFlLEVBQUUsR0FBRztpQkFDckIsQ0FBQztnQkFDRixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQkFDbkQsTUFBTTtZQUNSLEtBQUssSUFBSTtnQkFDUCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRztvQkFDZCxLQUFLLEVBQUUsSUFBSTtvQkFDWCxRQUFRLEVBQUUsSUFBSTtvQkFDZCxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUU7b0JBQ2IsaUJBQWlCLEVBQUUsSUFBSTtvQkFDdkIsZUFBZSxFQUFFLEdBQUc7aUJBQ3JCLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2hELE1BQU07WUFDUixLQUFLLFFBQVE7Z0JBQ1gsSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUc7b0JBQ2QsS0FBSyxFQUFFLElBQUk7b0JBQ1gsUUFBUSxFQUFFLElBQUk7b0JBQ2QsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNO29CQUNqQixpQkFBaUIsRUFBRSxJQUFJO29CQUN2QixlQUFlLEVBQUUsR0FBRztpQkFDckIsQ0FBQztnQkFDRixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztnQkFDdEQsTUFBTTtZQUNSLEtBQUssTUFBTTtnQkFDVCxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztnQkFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRztvQkFDZCxLQUFLLEVBQUUsSUFBSTtvQkFDWCxRQUFRLEVBQUUsSUFBSTtvQkFDZCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7b0JBQ2YsaUJBQWlCLEVBQUUsSUFBSTtvQkFDdkIsZUFBZSxFQUFFLEdBQUc7aUJBQ3JCLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQ25ELE1BQU07WUFDUixLQUFLLElBQUk7Z0JBQ1AsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBRWpCLElBQUksQ0FBQyxRQUFRLEdBQUc7b0JBQ2QsS0FBSyxFQUFFLElBQUk7b0JBQ1gsUUFBUSxFQUFFLElBQUk7b0JBQ2QsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO29CQUNiLGlCQUFpQixFQUFFLElBQUk7b0JBQ3ZCLGVBQWUsRUFBRSxHQUFHO2lCQUNyQixDQUFDO2dCQUNGLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUNoRCxNQUFNO1lBQ1IsS0FBSyxVQUFVO2dCQUNiLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO2dCQUV2QixJQUFJLENBQUMsUUFBUSxHQUFHO29CQUNkLEtBQUssRUFBRSxJQUFJO29CQUNYLFFBQVEsRUFBRSxJQUFJO29CQUNkLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUTtvQkFDbkIsaUJBQWlCLEVBQUUsSUFBSTtvQkFDdkIsZUFBZSxFQUFFLEdBQUc7aUJBQ3JCLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUN6RCxNQUFNO1lBQ1IsS0FBSyxRQUFRO2dCQUNYLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO2dCQUVyQixJQUFJLENBQUMsUUFBUSxHQUFHO29CQUNkLEtBQUssRUFBRSxJQUFJO29CQUNYLFFBQVEsRUFBRSxJQUFJO29CQUNkLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTTtvQkFDakIsaUJBQWlCLEVBQUUsSUFBSTtvQkFDdkIsZUFBZSxFQUFFLEdBQUc7aUJBQ3JCLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUV6RCxNQUFNO1lBQ1IsS0FBSyxNQUFNO2dCQUNULElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO2dCQUVuQixJQUFJLENBQUMsUUFBUSxHQUFHO29CQUNkLEtBQUssRUFBRSxJQUFJO29CQUNYLFFBQVEsRUFBRSxJQUFJO29CQUNkLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtvQkFDZixpQkFBaUIsRUFBRSxJQUFJO29CQUN2QixlQUFlLEVBQUUsR0FBRztpQkFDckIsQ0FBQztnQkFDRixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQ3pELE1BQU07WUFDUjtnQkFDRSxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztnQkFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRztvQkFDZCxLQUFLLEVBQUUsSUFBSTtvQkFDWCxRQUFRLEVBQUUsSUFBSTtvQkFDZCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7b0JBQ2YsaUJBQWlCLEVBQUUsSUFBSTtvQkFDdkIsZUFBZSxFQUFFLEdBQUc7aUJBQ3JCLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQ25ELE1BQU07U0FFVDtRQUNELElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxJQUFJLEVBQUU7WUFDaEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzlGLElBQUksTUFBVyxDQUFDO1lBRWhCLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLEVBQUU7Z0JBQzlCLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLEVBQUU7b0JBQzlCLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO3dCQUNuQyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztxQkFDN0M7eUJBQU07d0JBQ0wsTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7cUJBQ2hDO2lCQUNGO3FCQUFNO29CQUNMLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO2lCQUNoQzthQUNGO2lCQUFNO2dCQUNMLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUN0QztZQUVELE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsRyxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEcsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRTtnQkFDcEcsSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFO29CQUNkLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2lCQUM3RjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztpQkFDN0Y7YUFDRjtpQkFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO2dCQUMvQixJQUFJLElBQUksSUFBSSxFQUFFLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLEdBQUcsR0FBRyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztpQkFDckU7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLEdBQUcsR0FBRyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztpQkFDckU7YUFDRjtpQkFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO2dCQUNqQyxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2lCQUNqRjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7aUJBQ2pGO2FBQ0Y7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO2FBQzNDO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsYUFBYSxDQUFDO1FBQzFELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7UUFDckQsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBQ0QsZUFBZSxDQUFDLENBQUM7UUFDZixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ3RDLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDakIsS0FBSyxRQUFRO29CQUNYLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDO29CQUM1QixNQUFNO2dCQUNSLEtBQUssTUFBTTtvQkFDVCxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztvQkFDekIsTUFBTTtnQkFDUixLQUFLLElBQUk7b0JBQ1AsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7b0JBQ3RCLE1BQU07Z0JBQ1IsS0FBSyxRQUFRO29CQUNYLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDO29CQUM1QixNQUFNO2dCQUNSLEtBQUssTUFBTTtvQkFDVCxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztvQkFDekIsTUFBTTtnQkFDUixLQUFLLElBQUk7b0JBQ1AsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7b0JBQ3RCLE1BQU07Z0JBQ1IsS0FBSyxVQUFVO29CQUNiLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztvQkFDL0IsTUFBTTtnQkFDUixLQUFLLFFBQVE7b0JBQ1gsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO29CQUMvQixNQUFNO2dCQUNSLEtBQUssTUFBTTtvQkFDVCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7b0JBQy9CLE1BQU07YUFDVDtTQUNGO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFVO1FBQ3ZCLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTVDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxjQUFjLEtBQUssQ0FBQyxFQUFFO2dCQUM1RixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQztnQkFDOUQsNkJBQTZCO2FBQzlCO1FBQ0gsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRU4sSUFBSSxTQUFTLEtBQUssR0FBRyxFQUFFO1lBQ3JCLElBQUksVUFBVSxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEVBQUU7Z0JBQ25GLElBQUksU0FBUyxJQUFJLEdBQUcsRUFBRTtvQkFDcEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2lCQUN4QjthQUNGO1NBQ0Y7UUFDRCxJQUNFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxNQUFNO1lBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJO1lBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxRQUFRO1lBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxNQUFNO1lBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEVBQ2hDO1lBQ0EsSUFBSSxTQUFTLEtBQUssR0FBRyxFQUFFO2dCQUNyQixJQUFJLFVBQVUsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxFQUFFO29CQUNuRixJQUFJLFNBQVMsSUFBSSxHQUFHLEVBQUU7d0JBQ3BCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztxQkFDeEI7aUJBQ0Y7YUFDRjtTQUNGO1FBQ0QsSUFBSSxTQUFTLEtBQUssR0FBRyxFQUFFO1lBQ3JCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN4QjtJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsS0FBb0I7UUFDOUIsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFdBQVcsRUFBRTtZQUN4RCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztZQUNuRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3pCO1FBQ0QsbUJBQW1CO1FBQ25CLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxTQUFTLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ2pCO1FBQ0QsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFdBQVcsRUFBRTtZQUM3QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDakI7UUFDRCxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssV0FBVyxFQUFFO1lBQ3hELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsc0JBQXNCO1FBQ3RCLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxXQUFXLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxZQUFZLEVBQUU7WUFDM0QsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsY0FBYyxLQUFLLENBQUMsRUFBRTtnQkFDNUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUM7YUFDL0Q7U0FDRjtRQUVELGNBQWM7UUFDZCxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssTUFBTSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1NBQ3pCO1FBRUQsYUFBYTtRQUNiLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxLQUFLLEVBQUU7WUFDdkIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDbEgsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFO29CQUN4QyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztvQkFDeEIsVUFBVSxDQUFDLEdBQUcsRUFBRTt3QkFDZCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO3dCQUNyRSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztvQkFDckQsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNQO2dCQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFDdEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7b0JBQ3hCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7d0JBQ2QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQzt3QkFDckUsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7b0JBQ3JELENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDUDtnQkFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEVBQUU7b0JBQ3BDLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO29CQUN4QixVQUFVLENBQUMsR0FBRyxFQUFFO3dCQUNkLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7d0JBQ3JFLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO29CQUNyRCxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ1A7YUFDRjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO2FBQzdDO1NBQ0Y7UUFFRCxvQkFBb0I7UUFDcEIsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFdBQVcsRUFBRTtZQUM3QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2QyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ3hDLElBQUksS0FBSyxLQUFLLEdBQUcsRUFBRTtvQkFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7b0JBQ3hILFVBQVUsQ0FBQyxHQUFHLEVBQUU7d0JBQ2QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUNuRCxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztvQkFDMUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNQO2FBQ0Y7WUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ3RDLElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRTtvQkFDaEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7b0JBQ25HLFVBQVUsQ0FBQyxHQUFHLEVBQUU7d0JBQ2QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUNuRCxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztvQkFDMUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNQO2FBQ0Y7WUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ3BDLElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRTtvQkFDaEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7b0JBQzlFLFVBQVUsQ0FBQyxHQUFHLEVBQUU7d0JBQ2QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUNuRCxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztvQkFDMUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNQO2FBQ0Y7WUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7YUFDekI7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUM7YUFDMUI7U0FDRjtJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsS0FBb0I7UUFDaEMsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLEtBQUssRUFBRTtZQUN2QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNsSCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLGFBQWEsQ0FBQzthQUMzRDtpQkFBTTtnQkFDTCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQzthQUNwRDtTQUNGO1FBRUQsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUU5QixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFeEMsU0FBUztRQUNULElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxTQUFTLEVBQUU7WUFDM0IsT0FBTztZQUNQLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLEVBQUU7Z0JBQzVCLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQzVCLE1BQU0sT0FBTyxHQUFHLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztnQkFDN0IsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDOUIsSUFDRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsTUFBTTtvQkFDbEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUk7b0JBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO29CQUM5QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsUUFBUTtvQkFDcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLE1BQU07b0JBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEVBQ2hDO29CQUNBLElBQUksT0FBTyxLQUFLLElBQUksRUFBRTt3QkFDcEIsUUFBUSxHQUFHLEdBQUcsQ0FBQztxQkFDaEI7b0JBQ0QsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLE9BQU8sS0FBSyxJQUFJLEdBQUcsR0FBRyxFQUFFO3dCQUMxQyxRQUFRLEdBQUcsR0FBRyxDQUFDO3FCQUNoQjtvQkFDRCxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksT0FBTyxLQUFLLEdBQUcsR0FBRyxJQUFJLEVBQUU7d0JBQzFDLFFBQVEsR0FBRyxHQUFHLENBQUM7cUJBQ2hCO29CQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxFQUFFO3dCQUNsQixRQUFRLEdBQUcsSUFBSSxDQUFDO3FCQUNqQjt5QkFBTSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsRUFBRTt3QkFDekIsUUFBUSxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUM7cUJBQzNCO2lCQUNGO3FCQUFNO29CQUNMLElBQUksT0FBTyxLQUFLLElBQUksRUFBRTt3QkFDcEIsUUFBUSxHQUFHLEdBQUcsQ0FBQztxQkFDaEI7b0JBQ0QsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLE9BQU8sS0FBSyxJQUFJLEdBQUcsR0FBRyxFQUFFO3dCQUMxQyxRQUFRLEdBQUcsR0FBRyxDQUFDO3FCQUNoQjtvQkFDRCxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksT0FBTyxLQUFLLEdBQUcsR0FBRyxJQUFJLEVBQUU7d0JBQzFDLFFBQVEsR0FBRyxHQUFHLENBQUM7cUJBQ2hCO29CQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxFQUFFO3dCQUNsQixRQUFRLEdBQUcsSUFBSSxDQUFDO3FCQUNqQjt5QkFBTSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsRUFBRTt3QkFDekIsUUFBUSxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUM7cUJBQzNCO2lCQUNGO2dCQUNELE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDO2dCQUNwRixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLEdBQUcsWUFBWSxDQUFDO2dCQUNoRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQzthQUN2QjtZQUNELFNBQVM7WUFDVCxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxFQUFFO2dCQUN4RCxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO2dCQUM1QixNQUFNLE9BQU8sR0FBRyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7Z0JBRTdCLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzlCLElBQUksT0FBTyxLQUFLLElBQUksRUFBRTtvQkFDcEIsUUFBUSxHQUFHLEdBQUcsQ0FBQztpQkFDaEI7Z0JBQ0QsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLE9BQU8sS0FBSyxJQUFJLEdBQUcsR0FBRyxFQUFFO29CQUMxQyxRQUFRLEdBQUcsR0FBRyxDQUFDO2lCQUNoQjtnQkFDRCxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksT0FBTyxLQUFLLEdBQUcsR0FBRyxJQUFJLEVBQUU7b0JBQzFDLFFBQVEsR0FBRyxHQUFHLENBQUM7aUJBQ2hCO2dCQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxFQUFFO29CQUNsQixRQUFRLEdBQUcsSUFBSSxDQUFDO2lCQUNqQjtxQkFBTSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsRUFBRTtvQkFDekIsUUFBUSxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUM7aUJBQzNCO2dCQUNELE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO2dCQUN6QyxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQztnQkFDL0QsTUFBTSxNQUFNLEdBQUcsYUFBYSxHQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUUsR0FBRyxZQUFZLENBQUM7Z0JBQ2xFLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO2FBQ3pCO1lBRUQsU0FBUztZQUNULElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3hELE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQzlCLE1BQU0sU0FBUyxHQUFHLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztnQkFFakMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxTQUFTLEtBQUssSUFBSSxFQUFFO29CQUN0QixRQUFRLEdBQUcsR0FBRyxDQUFDO2lCQUNoQjtnQkFDRCxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksU0FBUyxLQUFLLElBQUksR0FBRyxHQUFHLEVBQUU7b0JBQzVDLFFBQVEsR0FBRyxHQUFHLENBQUM7aUJBQ2hCO2dCQUNELElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxTQUFTLEtBQUssR0FBRyxHQUFHLElBQUksRUFBRTtvQkFDNUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztpQkFDaEI7Z0JBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEVBQUU7b0JBQ2xCLFFBQVEsR0FBRyxJQUFJLENBQUM7aUJBQ2pCO3FCQUFNLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxFQUFFO29CQUN6QixRQUFRLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQztpQkFDM0I7Z0JBQ0QsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQzlELE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDO2dCQUMxQyxNQUFNLE1BQU0sR0FBRyxhQUFhLEdBQUcsUUFBUSxDQUFDLFFBQVEsRUFBRSxHQUFHLFlBQVksQ0FBQztnQkFDbEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7YUFDekI7WUFFRCxhQUFhO1lBQ2IsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUN4QyxJQUFJLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxFQUFFO29CQUMzQixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBRS9CLE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO29CQUNuRixNQUFNLFlBQVksR0FBRyxLQUFLLENBQUM7b0JBRTNCLElBQUksS0FBSyxLQUFLLFlBQVksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsRUFBRTt3QkFDcEQsT0FBTyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztxQkFDbEQ7eUJBQU0sSUFBSSxLQUFLLEtBQUssWUFBWSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFO3dCQUMzRCxPQUFPLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO3FCQUNsRDtvQkFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLGFBQWEsR0FBRyxPQUFPLEdBQUcsWUFBWSxDQUFDO2lCQUN6RDthQUNGO1lBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUN0QyxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxFQUFFO29CQUM1QixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBRTlCLE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO29CQUM5RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUM7b0JBRTFCLElBQUksSUFBSSxLQUFLLFlBQVksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsRUFBRTt3QkFDbkQsT0FBTyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztxQkFDbEQ7eUJBQU0sSUFBSSxJQUFJLEtBQUssWUFBWSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFO3dCQUMxRCxPQUFPLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO3FCQUNsRDtvQkFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLGFBQWEsR0FBRyxPQUFPLEdBQUcsWUFBWSxDQUFDO2lCQUN6RDthQUNGO1lBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNwQyxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxFQUFFO29CQUM1QixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBRS9CLE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO29CQUN6QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUM7b0JBRTFCLElBQUksSUFBSSxLQUFLLFlBQVksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsRUFBRTt3QkFDbkQsUUFBUSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztxQkFDbkQ7eUJBQU0sSUFBSSxJQUFJLEtBQUssWUFBWSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFO3dCQUMxRCxRQUFRLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO3FCQUNuRDtvQkFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLGFBQWEsR0FBRyxRQUFRLEdBQUcsWUFBWSxDQUFDO2lCQUMxRDthQUNGO1NBQ0Y7UUFFRCxXQUFXO1FBQ1gsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFdBQVcsRUFBRTtZQUM3QixPQUFPO1lBQ1AsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsRUFBRTtnQkFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDNUIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO2dCQUU3QixRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM5QixJQUNFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxNQUFNO29CQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSTtvQkFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUU7b0JBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxRQUFRO29CQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsTUFBTTtvQkFDbEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksRUFDaEM7b0JBQ0EsSUFBSSxPQUFPLEtBQUssSUFBSSxFQUFFO3dCQUNwQixRQUFRLEdBQUcsR0FBRyxDQUFDO3FCQUNoQjtvQkFDRCxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksT0FBTyxLQUFLLElBQUksR0FBRyxHQUFHLEVBQUU7d0JBQzFDLFFBQVEsR0FBRyxHQUFHLENBQUM7cUJBQ2hCO29CQUNELElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxPQUFPLEtBQUssR0FBRyxHQUFHLElBQUksRUFBRTt3QkFDMUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztxQkFDaEI7b0JBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUU7d0JBQ2pCLFFBQVEsR0FBRyxJQUFJLENBQUM7cUJBQ2pCO3lCQUFNLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxFQUFFO3dCQUN6QixRQUFRLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQztxQkFDM0I7aUJBQ0Y7cUJBQU07b0JBQ0wsSUFBSSxPQUFPLEtBQUssSUFBSSxFQUFFO3dCQUNwQixRQUFRLEdBQUcsR0FBRyxDQUFDO3FCQUNoQjtvQkFDRCxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksT0FBTyxLQUFLLElBQUksR0FBRyxHQUFHLEVBQUU7d0JBQzFDLFFBQVEsR0FBRyxHQUFHLENBQUM7cUJBQ2hCO29CQUNELElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxPQUFPLEtBQUssR0FBRyxHQUFHLElBQUksRUFBRTt3QkFDMUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztxQkFDaEI7b0JBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUU7d0JBQ2pCLFFBQVEsR0FBRyxJQUFJLENBQUM7cUJBQ2pCO3lCQUFNLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxFQUFFO3dCQUN6QixRQUFRLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQztxQkFDM0I7aUJBQ0Y7Z0JBQ0QsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUM7Z0JBQ3RGLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUUsR0FBRyxjQUFjLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2FBQ3ZCO1lBQ0QsU0FBUztZQUNULElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3hELE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQzlCLE1BQU0sU0FBUyxHQUFHLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztnQkFFakMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxTQUFTLEtBQUssSUFBSSxFQUFFO29CQUN0QixRQUFRLEdBQUcsR0FBRyxDQUFDO2lCQUNoQjtnQkFDRCxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksU0FBUyxLQUFLLElBQUksR0FBRyxHQUFHLEVBQUU7b0JBQzVDLFFBQVEsR0FBRyxHQUFHLENBQUM7aUJBQ2hCO2dCQUNELElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxTQUFTLEtBQUssR0FBRyxHQUFHLElBQUksRUFBRTtvQkFDNUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztpQkFDaEI7Z0JBQ0QsSUFBSSxTQUFTLEtBQUssSUFBSSxFQUFFO29CQUN0QixRQUFRLEdBQUcsR0FBRyxDQUFDO2lCQUNoQjtnQkFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRTtvQkFDakIsUUFBUSxHQUFHLElBQUksQ0FBQztpQkFDakI7cUJBQU0sSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEVBQUU7b0JBQ3pCLFFBQVEsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDO2lCQUMzQjtnQkFDRCxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO2dCQUM3QyxNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDO2dCQUNuRSxNQUFNLE1BQU0sR0FBRyxpQkFBaUIsR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQzFFLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO2FBQ3pCO1lBRUQsU0FBUztZQUNULElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3hELE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQ2hDLE1BQU0sU0FBUyxHQUFHLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztnQkFFbkMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxXQUFXLEtBQUssSUFBSSxFQUFFO29CQUN4QixRQUFRLEdBQUcsR0FBRyxDQUFDO2lCQUNoQjtnQkFDRCxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksV0FBVyxLQUFLLElBQUksR0FBRyxHQUFHLEVBQUU7b0JBQzlDLFFBQVEsR0FBRyxHQUFHLENBQUM7aUJBQ2hCO2dCQUNELElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxXQUFXLEtBQUssR0FBRyxHQUFHLElBQUksRUFBRTtvQkFDOUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztpQkFDaEI7Z0JBQ0QsSUFBSSxXQUFXLEtBQUssSUFBSSxFQUFFO29CQUN4QixRQUFRLEdBQUcsR0FBRyxDQUFDO2lCQUNoQjtnQkFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRTtvQkFDakIsUUFBUSxHQUFHLElBQUksQ0FBQztpQkFDakI7cUJBQU0sSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEVBQUU7b0JBQ3pCLFFBQVEsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDO2lCQUMzQjtnQkFDRCxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO2dCQUNsRSxNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDO2dCQUM5QyxNQUFNLE1BQU0sR0FBRyxpQkFBaUIsR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQzFFLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO2FBQ3pCO1lBRUQsT0FBTztZQUNQLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDeEMsSUFBSSxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsRUFBRTtvQkFDM0IsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUUvQixNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztvQkFDbkYsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDO29CQUUzQixJQUFJLEtBQUssS0FBSyxZQUFZLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLEVBQUU7d0JBQ3BELE9BQU8sR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7cUJBQ2xEO3lCQUFNLElBQUksS0FBSyxLQUFLLFlBQVksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsRUFBRTt3QkFDM0QsT0FBTyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztxQkFDbEQ7b0JBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxhQUFhLEdBQUcsT0FBTyxHQUFHLFlBQVksQ0FBQztpQkFDekQ7YUFDRjtZQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDdEMsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsRUFBRTtvQkFDNUIsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUU5QixNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztvQkFDOUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDO29CQUUxQixJQUFJLElBQUksS0FBSyxZQUFZLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLEVBQUU7d0JBQ25ELE9BQU8sR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7cUJBQ2xEO3lCQUFNLElBQUksSUFBSSxLQUFLLFlBQVksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsRUFBRTt3QkFDMUQsT0FBTyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztxQkFDbEQ7b0JBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxhQUFhLEdBQUcsT0FBTyxHQUFHLFlBQVksQ0FBQztpQkFDekQ7YUFDRjtZQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDcEMsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsRUFBRTtvQkFDNUIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUUvQixNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztvQkFDekMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDO29CQUMxQixpQ0FBaUM7b0JBQ2pDLElBQUksSUFBSSxLQUFLLFlBQVksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsRUFBRTt3QkFDbkQsUUFBUSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztxQkFDbkQ7eUJBQU0sSUFBSSxJQUFJLEtBQUssWUFBWSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFO3dCQUMxRCxRQUFRLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO3FCQUNuRDtvQkFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLGFBQWEsR0FBRyxRQUFRLEdBQUcsWUFBWSxDQUFDO2lCQUMxRDthQUNGO1NBQ0Y7UUFFRCxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssV0FBVyxFQUFFO1lBQ3hELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsYUFBYSxDQUFDO1lBQzFELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDeEIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxRQUFRLEVBQUU7WUFDMUIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFvQjtRQUM5QixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxjQUFjLEtBQUssQ0FBQyxFQUFFO1lBQzVGLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDO1NBQy9EO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQUk7UUFDckIsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLENBQUMsRUFBRTtZQUNwRCxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUMvQixPQUFPLFFBQVEsQ0FBQztTQUNqQjtJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsR0FBRztRQUN4QixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMxQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ2xDO2FBQU0sSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQy9CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNyQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JCLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2hDLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2xDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNoQjtJQUNILENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN2RSxDQUFDOzttSEF2OEJVLHFCQUFxQjt1R0FBckIscUJBQXFCLHFNQUZyQixDQUFDLEVBQUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxDQUFDLGlEQ2hDdEYsdWpEQW9Cc0c7NEZEY3pGLHFCQUFxQjtrQkFQakMsU0FBUzsrQkFDRSxnQkFBZ0IsbUJBRVQsdUJBQXVCLENBQUMsTUFBTSxRQUN6QyxFQUFFLEtBQUssRUFBQyxhQUFhLEVBQUUsYUFDbEIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxXQUFXLHVCQUF1QixFQUFFLENBQUM7aUlBSXBGLGNBQWM7c0JBRGIsTUFBTTtnQkFRUCxRQUFRO3NCQURQLEtBQUs7Z0JBS04sY0FBYztzQkFEYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgVmlld0NoaWxkLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgRXZlbnRFbWl0dGVyLFxuICBPdXRwdXQsXG4gIENvbnRlbnRDaGlsZFxuXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhCYXNlVGV4dENvbXBvbmVudCwgQVhWYWxpZGF0YWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2UvZWxlbWVudC5jbGFzcyc7XG5pbXBvcnQgeyBfIH0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xuaW1wb3J0IHsgQVhWYWx1ZUV2ZW50IH0gZnJvbSAnLi4vYmFzZS9ldmVudHMuY2xhc3MnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdG9yIH0gZnJvbSAnQGFjb3JleC9jb3JlJztcblxuZXhwb3J0IGNsYXNzIEFYVGltZVBpY2tlckl0ZW1DaGFuZ2VkRXZlbnQge1xuICBtaW51dGU/OiBudW1iZXI7XG4gIHNlY29uZD86IG51bWJlcjtcbiAgaG91cj86IG51bWJlcjtcbiAgdGltZTogc3RyaW5nO1xuXG59XG5leHBvcnQgY2xhc3MgQVhUaW1lUGlja2VyQ2hhbmdlZEV2ZW50IGV4dGVuZHMgQVhWYWx1ZUV2ZW50PEFYVGltZVBpY2tlckl0ZW1DaGFuZ2VkRXZlbnQ+IHsgfVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC10aW1lLXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi90aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7IHN0eWxlOid3aWR0aDogMTAwJScgfSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBBWFZhbGlkYXRhYmxlQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhUaW1lUGlja2VyQ29tcG9uZW50IH1dXG59KVxuZXhwb3J0IGNsYXNzIEFYVGltZVBpY2tlckNvbXBvbmVudCBleHRlbmRzIEFYQmFzZVRleHRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBAT3V0cHV0KClcbiAgb25WYWx1ZUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxBWFRpbWVQaWNrZXJDaGFuZ2VkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBWFRpbWVQaWNrZXJDaGFuZ2VkRXZlbnQ+KCk7XG5cbiAgLy8gQFZpZXdDaGlsZCgnaW5wdXQnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAvLyBAQ29udGVudENoaWxkKCdpbnB1dCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIC8vIGlucHV0OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gIEBJbnB1dCgpXG4gIHRpbWVUeXBlOiBhbnk7XG5cbiAgdHlwZTogc3RyaW5nID0gJ0hIbW0nO1xuICBASW5wdXQoKVxuICBzaG93Q3VyZW50VGltZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNsZWFyRGlzYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBISG1tc3M6IGFueSA9IFsvWzAtMl0vLCAvWzAtOV0vLCAnOicsIC9bMC01XS8sIC9bMC05XS8sICc6JywgL1swLTVdLywgL1swLTldL107XG4gIEhIbW06IGFueSA9IFsvWzAtMl0vLCAvWzAtOV0vLCAnOicsIC9bMC01XS8sIC9bMC05XS9dO1xuICBISDogYW55ID0gWy9bMC0yXS8sIC9bMC05XS9dO1xuICBoaG1tc3M6IGFueSA9IFsvWzAtMV0vLCAvWzAtOV0vLCAnOicsIC9bMC01XS8sIC9bMC05XS8sICc6JywgL1swLTVdLywgL1swLTldL107XG4gIGhobW06IGFueSA9IFsvWzAtMV0vLCAvWzAtOV0vLCAnOicsIC9bMC01XS8sIC9bMC05XS9dO1xuICBoaDogYW55ID0gWy9bMC0xXS8sIC9bMC05XS9dO1xuICAvLyBUT0RPOiBhcHBseSBhbSBwbSBmcm9tIGxvY2FsZVxuICBoaG1tc3NhbTogYW55ID0gWy9bMC0xXS8sIC9bMC05XS8sICc6JywgL1swLTVdLywgL1swLTldLywgJzonLCAvWzAtNV0vLCAvWzAtOV0vLCAnICcsIC9bYXxwfNmCfNioXS8sIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUubScpXTtcbiAgaGhtbWFtOiBhbnkgPSBbL1swLTFdLywgL1swLTldLywgJzonLCAvWzAtNV0vLCAvWzAtOV0vLCAnICcsIC9bYXxwfNmCfNioXS8sIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUubScpXTtcbiAgaGhhbTogYW55ID0gWy9bMC0xXS8sIC9bMC05XS8sICcgJywgL1thfHB82YJ82KhdLywgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5tJyldO1xuICB0ZXh0VmFsdWU6IHN0cmluZyA9ICcnO1xuXG4gIHZhbHVlSGFtOiBzdHJpbmcgPSAnLS0gJyArIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYW0nKTtcbiAgdmFsdWVNYW06IHN0cmluZyA9ICctLTotLSAnICsgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5hbScpO1xuICB2YWx1ZVNhbTogc3RyaW5nID0gJy0tOi0tOi0tICcgKyBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmFtJyk7XG5cblxuICBwcml2YXRlIF92YWx1ZXM6IHN0cmluZztcbiAgcHVibGljIGdldCB2YWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZXM7XG4gIH1cbiAgcHVibGljIHNldCB2YWx1ZSh2OiBzdHJpbmcpIHtcbiAgICBpZiAodiA9PT0gJycgfHwgdiA9PSBudWxsIHx8IHYgPT09ICctLTotLTotLScgfHwgdiA9PT0gJy0tOi0tJyB8fCB2ID09PSAnLS0nIHx8IHYgPT09IHRoaXMudmFsdWVTYW0gfHwgdiA9PT0gdGhpcy52YWx1ZU1hbSB8fCB2ID09PSB0aGlzLnZhbHVlSGFtKSB7XG4gICAgICB0aGlzLmNsZWFyRGlzYWJsZWQgPSBmYWxzZTtcblxuICAgICAgY29uc3Qgb2xkID0gdGhpcy5fdmFsdWVzO1xuICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnSEhtbXNzJzpcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9ICctLTotLTotLSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0hIbW0nOlxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJy0tOi0tJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnSEgnOlxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJy0tJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaGhtbXNzJzpcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9ICctLTotLTotLSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2hobW0nOlxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJy0tOi0tJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJy0tJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaGhtbXNzYW0nOlxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy52YWx1ZVNhbTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaGhtbWFtJzpcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHRoaXMudmFsdWVNYW07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2hoYW0nOlxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy52YWx1ZUhhbTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgdGhpcy5fdmFsdWVzID0gbnVsbDtcbiAgICAgIGlmICh2ICE9PSBvbGQpIHtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KG51bGwpO1xuICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VkLmVtaXQoe1xuICAgICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgICB2YWx1ZTogeyBob3VyOiBudWxsLCBtaW51dGU6IG51bGwsIHNlY29uZDogbnVsbCwgdGltZTogbnVsbCB9LFxuICAgICAgICAgIG9sZFZhbHVlOiB7IHRpbWU6IG9sZCB9LFxuICAgICAgICAgIGh0bWxFbGVtZW50OiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsZWFyRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgaWYgKHRoaXMuX3ZhbHVlcyAmJiB2KSB7XG4gICAgICAgIGNvbnN0IG9sZCA9IHRoaXMuX3ZhbHVlcztcbiAgICAgICAgY29uc3QgaW5kMSA9IHYuY2hhckF0KDApO1xuICAgICAgICBjb25zdCBpbmQyID0gdi5jaGFyQXQoMSk7XG4gICAgICAgIGNvbnN0IGluZDMgPSB2LmNoYXJBdCgyKTtcbiAgICAgICAgY29uc3QgaW5kNCA9IHYuY2hhckF0KDMpO1xuICAgICAgICBjb25zdCBpbmQ1ID0gdi5jaGFyQXQoNCk7XG4gICAgICAgIGNvbnN0IGluZDYgPSB2LmNoYXJBdCg1KTtcbiAgICAgICAgY29uc3QgaW5kNyA9IHYuY2hhckF0KDYpO1xuICAgICAgICBjb25zdCBpbmQ4ID0gdi5jaGFyQXQoNyk7XG4gICAgICAgIGNvbnN0IGluZDkgPSB2LmNoYXJBdCg4KTtcbiAgICAgICAgY29uc3QgaW5kMTAgPSB2LmNoYXJBdCg5KTtcblxuICAgICAgICBjb25zdCBpbmRPbGQ0ID0gb2xkLmNoYXJBdCg5KTtcbiAgICAgICAgY29uc3QgaW5kT2xkNyA9IG9sZC5jaGFyQXQoOSk7XG4gICAgICAgIGNvbnN0IGluZE9sZDEwID0gb2xkLmNoYXJBdCg5KTtcblxuICAgICAgICAvLyBoYW5kbGUgaGhtbXNzQW1cbiAgICAgICAgaWYgKGluZDEgPT09ICctJyAmJiBpbmQyICE9PSAnLScgJiYgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zc2FtKSB7XG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSAnMCcgKyBpbmQyICsgaW5kMyArIGluZDQgKyBpbmQ1ICsgaW5kNiArIGluZDcgKyBpbmQ4ICsgaW5kOSArIGluZDEwICsgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5tJyk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCAyKTtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSAyO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmQ0ID09PSAnLScgJiYgaW5kNSAhPT0gJy0nICYmIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tc3NhbSkge1xuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gaW5kMSArIGluZDIgKyBpbmQzICsgJzAnICsgaW5kNSArIGluZDYgKyBpbmQ3ICsgaW5kOCArIGluZDkgKyBpbmQxMCArIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUubScpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgNSk7XG4gICAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gNTtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kNyA9PT0gJy0nICYmIGluZDggIT09ICctJyAmJiB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzYW0pIHtcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IGluZDEgKyBpbmQyICsgaW5kMyArIGluZDQgKyBpbmQ1ICsgaW5kNiArICcwJyArIGluZDggKyBpbmQ5ICsgaW5kMTAgKyBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLm0nKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIDgpO1xuICAgICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA9IDg7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZE9sZDEwID09PSAnLScgJiYgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zc2FtKSB7XG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSBpbmQxICsgaW5kMiArIGluZDMgKyBpbmQ0ICsgaW5kNSArIGluZDYgKyBpbmQ3ICsgaW5kOCArIGluZDkgKyBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmFtJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvL1xuICAgICAgICBpZiAoaW5kMSA9PT0gJy0nICYmIGluZDIgIT09ICctJyAmJiB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbWFtKSB7XG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSAnMCcgKyBpbmQyICsgaW5kMyArIGluZDQgKyBpbmQ1ICsgaW5kNiArIGluZDcgKyBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLm0nKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIDIpO1xuICAgICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA9IDI7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZDQgPT09ICctJyAmJiBpbmQ1ICE9PSAnLScgJiYgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1hbSkge1xuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gaW5kMSArIGluZDIgKyBpbmQzICsgJzAnICsgaW5kNSArIGluZDYgKyBpbmQ3ICsgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5tJyk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCA1KTtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSA1O1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmRPbGQ3ID09PSAnLScgJiYgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1hbSkge1xuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gaW5kMSArIGluZDIgKyBpbmQzICsgaW5kNCArIGluZDUgKyBpbmQ2ICsgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5hbScpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9cbiAgICAgICAgaWYgKGluZDEgPT09ICctJyAmJiBpbmQyICE9PSAnLScgJiYgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhoYW0pIHtcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9ICcwJyArIGluZDIgKyBpbmQzICsgaW5kNCArIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUubScpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgMik7XG4gICAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gMjtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kT2xkNCA9PT0gJy0nICYmIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaGFtKSB7XG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSBpbmQxICsgaW5kMiArIGluZDMgKyBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmFtJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvL1xuICAgICAgICBpZiAoaW5kMSA9PT0gJy0nICYmIGluZDIgIT09ICctJyAmJiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zcyB8fCB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuSEhtbXNzKSkge1xuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJzAnICsgaW5kMiArIGluZDMgKyBpbmQ0ICsgaW5kNSArIGluZDYgKyBpbmQ3ICsgaW5kODtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIDIpO1xuICAgICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA9IDI7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZDQgPT09ICctJyAmJiBpbmQ1ICE9PSAnLScgJiYgKHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tc3MgfHwgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLkhIbW1zcykpIHtcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IGluZDEgKyBpbmQyICsgaW5kMyArICcwJyArIGluZDUgKyBpbmQ2ICsgaW5kNyArIGluZDg7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCA2KTtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSA2O1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmQ3ID09PSAnLScgJiYgaW5kOCAhPT0gJy0nICYmICh0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzIHx8IHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5ISG1tc3MpKSB7XG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSBpbmQxICsgaW5kMiArIGluZDMgKyBpbmQ0ICsgaW5kNSArIGluZDYgKyAnMCcgKyBpbmQ4O1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgOSk7XG4gICAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gOTtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vXG4gICAgICAgIGlmIChpbmQxID09PSAnLScgJiYgaW5kMiAhPT0gJy0nICYmICh0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbSB8fCB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuSEhtbSkpIHtcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9ICcwJyArIGluZDIgKyBpbmQzICsgaW5kNCArIGluZDU7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCAyKTtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSAyO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmQ0ID09PSAnLScgJiYgaW5kNSAhPT0gJy0nICYmICh0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbSB8fCB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuSEhtbSkpIHtcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IGluZDEgKyBpbmQyICsgaW5kMyArICcwJyArIGluZDU7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCA1KTtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSA1O1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9cbiAgICAgICAgaWYgKGluZDEgPT09ICctJyAmJiBpbmQyICE9PSAnLScgJiYgKHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaCB8fCB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuSEgpKSB7XG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSAnMCcgKyBpbmQyO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgMik7XG4gICAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gMjtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHYgIT09IHRoaXMuX3ZhbHVlcykge1xuICAgICAgICBjb25zdCBvbGQgPSB0aGlzLl92YWx1ZXM7XG4gICAgICAgIHRoaXMudGV4dFZhbHVlID0gdjtcbiAgICAgICAgdGhpcy5fdmFsdWVzID0gKHYgJiYgdi5pbmRleE9mKCctJykgPT09IC0xKSA/IHYgOiBudWxsO1xuICAgICAgICBpZiAodi5pbmRleE9mKCctJykgPT09IC0xKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHYpO1xuICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZWQuZW1pdCh7XG4gICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICB0aW1lOiB2LFxuICAgICAgICAgICAgICBob3VyOiBOdW1iZXIodlswXSArIHZbMV0pLFxuICAgICAgICAgICAgICBtaW51dGU6IHZbM10gJiYgdlszXSAhPT0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5hJykgJiYgdlszXSAhPT0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5wJykgPyBOdW1iZXIodlszXSArIHZbNF0pIDogbnVsbCxcbiAgICAgICAgICAgICAgc2Vjb25kOiB2WzZdICYmIHZbNl0gIT09IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYScpICYmIHZbNl0gIT09IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucCcpID8gTnVtYmVyKHZbNl0gKyB2WzddKSA6IG51bGxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbGRWYWx1ZTogeyB0aW1lOiBvbGQgfSxcbiAgICAgICAgICAgIGh0bWxFbGVtZW50OiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIHRoaXMuY2xlYXJWYWxpZGF0aW9uU3R5bGUodGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGN1cnNvclBvc2l0aW9uOiBudW1iZXIgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBjZHI6IENoYW5nZURldGVjdG9yUmVmLCByZWY6IEVsZW1lbnRSZWYpIHtcbiAgICBzdXBlcihjZHIsIHJlZik7XG4gICAgXG4gICAgdGhpcy50aW1lVHlwZSA9ICdISG1tJztcbiAgfVxuICBjbGVhclZhbHVlKCkge1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgICB0aGlzLmhhbmRsZUlucHV0Rm9jdXMoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHN3aXRjaCAodGhpcy50aW1lVHlwZSkge1xuICAgICAgY2FzZSAnSEhtbXNzJzpcbiAgICAgICAgdGhpcy50eXBlID0gJ0hIbW1zcyc7XG4gICAgICAgIHRoaXMudGltZVR5cGUgPSB7XG4gICAgICAgICAgZ3VpZGU6IHRydWUsXG4gICAgICAgICAgc2hvd01hc2s6IHRydWUsXG4gICAgICAgICAgbWFzazogdGhpcy5ISG1tc3MsXG4gICAgICAgICAga2VlcENoYXJQb3NpdGlvbnM6IHRydWUsXG4gICAgICAgICAgcGxhY2Vob2xkZXJDaGFyOiAnLSdcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZSA6ICctLTotLTotLSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnSEhtbSc6XG4gICAgICAgIHRoaXMudHlwZSA9ICdISG1tJztcbiAgICAgICAgdGhpcy50aW1lVHlwZSA9IHtcbiAgICAgICAgICBndWlkZTogdHJ1ZSxcbiAgICAgICAgICBzaG93TWFzazogdHJ1ZSxcbiAgICAgICAgICBtYXNrOiB0aGlzLkhIbW0sXG4gICAgICAgICAga2VlcENoYXJQb3NpdGlvbnM6IHRydWUsXG4gICAgICAgICAgcGxhY2Vob2xkZXJDaGFyOiAnLSdcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZSA6ICctLTotLSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnSEgnOlxuICAgICAgICB0aGlzLnR5cGUgPSAnSEgnO1xuICAgICAgICB0aGlzLnRpbWVUeXBlID0ge1xuICAgICAgICAgIGd1aWRlOiB0cnVlLFxuICAgICAgICAgIHNob3dNYXNrOiB0cnVlLFxuICAgICAgICAgIG1hc2s6IHRoaXMuSEgsXG4gICAgICAgICAga2VlcENoYXJQb3NpdGlvbnM6IHRydWUsXG4gICAgICAgICAgcGxhY2Vob2xkZXJDaGFyOiAnLSdcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZSA6ICctLSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaGhtbXNzJzpcbiAgICAgICAgdGhpcy50eXBlID0gJ2hobW1zcyc7XG4gICAgICAgIHRoaXMudGltZVR5cGUgPSB7XG4gICAgICAgICAgZ3VpZGU6IHRydWUsXG4gICAgICAgICAgc2hvd01hc2s6IHRydWUsXG4gICAgICAgICAgbWFzazogdGhpcy5oaG1tc3MsXG4gICAgICAgICAga2VlcENoYXJQb3NpdGlvbnM6IHRydWUsXG4gICAgICAgICAgcGxhY2Vob2xkZXJDaGFyOiAnLSdcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZSA6ICctLTotLTotLSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaGhtbSc6XG4gICAgICAgIHRoaXMudHlwZSA9ICdoaG1tJztcbiAgICAgICAgdGhpcy50aW1lVHlwZSA9IHtcbiAgICAgICAgICBndWlkZTogdHJ1ZSxcbiAgICAgICAgICBzaG93TWFzazogdHJ1ZSxcbiAgICAgICAgICBtYXNrOiB0aGlzLmhobW0sXG4gICAgICAgICAga2VlcENoYXJQb3NpdGlvbnM6IHRydWUsXG4gICAgICAgICAgcGxhY2Vob2xkZXJDaGFyOiAnLSdcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZSA6ICctLTotLSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaGgnOlxuICAgICAgICB0aGlzLnR5cGUgPSAnaGgnO1xuXG4gICAgICAgIHRoaXMudGltZVR5cGUgPSB7XG4gICAgICAgICAgZ3VpZGU6IHRydWUsXG4gICAgICAgICAgc2hvd01hc2s6IHRydWUsXG4gICAgICAgICAgbWFzazogdGhpcy5oaCxcbiAgICAgICAgICBrZWVwQ2hhclBvc2l0aW9uczogdHJ1ZSxcbiAgICAgICAgICBwbGFjZWhvbGRlckNoYXI6ICctJ1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHRoaXMudmFsdWUgPyB0aGlzLnZhbHVlIDogJy0tJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdoaG1tc3NhbSc6XG4gICAgICAgIHRoaXMudHlwZSA9ICdoaG1tc3NhbSc7XG5cbiAgICAgICAgdGhpcy50aW1lVHlwZSA9IHtcbiAgICAgICAgICBndWlkZTogdHJ1ZSxcbiAgICAgICAgICBzaG93TWFzazogdHJ1ZSxcbiAgICAgICAgICBtYXNrOiB0aGlzLmhobW1zc2FtLFxuICAgICAgICAgIGtlZXBDaGFyUG9zaXRpb25zOiB0cnVlLFxuICAgICAgICAgIHBsYWNlaG9sZGVyQ2hhcjogJy0nXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy52YWx1ZSA/IHRoaXMudmFsdWUgOiB0aGlzLnZhbHVlU2FtO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2hobW1hbSc6XG4gICAgICAgIHRoaXMudHlwZSA9ICdoaG1tYW0nO1xuXG4gICAgICAgIHRoaXMudGltZVR5cGUgPSB7XG4gICAgICAgICAgZ3VpZGU6IHRydWUsXG4gICAgICAgICAgc2hvd01hc2s6IHRydWUsXG4gICAgICAgICAgbWFzazogdGhpcy5oaG1tYW0sXG4gICAgICAgICAga2VlcENoYXJQb3NpdGlvbnM6IHRydWUsXG4gICAgICAgICAgcGxhY2Vob2xkZXJDaGFyOiAnLSdcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZSA6IHRoaXMudmFsdWVNYW07XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdoaGFtJzpcbiAgICAgICAgdGhpcy50eXBlID0gJ2hoYW0nO1xuXG4gICAgICAgIHRoaXMudGltZVR5cGUgPSB7XG4gICAgICAgICAgZ3VpZGU6IHRydWUsXG4gICAgICAgICAgc2hvd01hc2s6IHRydWUsXG4gICAgICAgICAgbWFzazogdGhpcy5oaGFtLFxuICAgICAgICAgIGtlZXBDaGFyUG9zaXRpb25zOiB0cnVlLFxuICAgICAgICAgIHBsYWNlaG9sZGVyQ2hhcjogJy0nXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy52YWx1ZSA/IHRoaXMudmFsdWUgOiB0aGlzLnZhbHVlSGFtO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMudHlwZSA9ICdISG1tJztcbiAgICAgICAgdGhpcy50aW1lVHlwZSA9IHtcbiAgICAgICAgICBndWlkZTogdHJ1ZSxcbiAgICAgICAgICBzaG93TWFzazogdHJ1ZSxcbiAgICAgICAgICBtYXNrOiB0aGlzLkhIbW0sXG4gICAgICAgICAga2VlcENoYXJQb3NpdGlvbnM6IHRydWUsXG4gICAgICAgICAgcGxhY2Vob2xkZXJDaGFyOiAnLSdcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZSA6ICctLTotLSc7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgfVxuICAgIGlmICh0aGlzLnNob3dDdXJlbnRUaW1lID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBob3VyID0gbmV3IERhdGUoKS5nZXRIb3VycygpID4gMTAgPyBuZXcgRGF0ZSgpLmdldEhvdXJzKCkgOiAnMCcgKyBuZXcgRGF0ZSgpLmdldEhvdXJzKCk7XG4gICAgICBsZXQgYW1Ib3VyOiBhbnk7XG5cbiAgICAgIGlmIChuZXcgRGF0ZSgpLmdldEhvdXJzKCkgPiAxMCkge1xuICAgICAgICBpZiAobmV3IERhdGUoKS5nZXRIb3VycygpID4gMTIpIHtcbiAgICAgICAgICBpZiAobmV3IERhdGUoKS5nZXRIb3VycygpIC0gMTIgPCAxMCkge1xuICAgICAgICAgICAgYW1Ib3VyID0gJzAnICsgKG5ldyBEYXRlKCkuZ2V0SG91cnMoKSAtIDEyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYW1Ib3VyID0gbmV3IERhdGUoKS5nZXRIb3VycygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhbUhvdXIgPSBuZXcgRGF0ZSgpLmdldEhvdXJzKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFtSG91ciA9ICcwJyArIG5ldyBEYXRlKCkuZ2V0SG91cnMoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWluID0gbmV3IERhdGUoKS5nZXRNaW51dGVzKCkgPiA5ID8gbmV3IERhdGUoKS5nZXRNaW51dGVzKCkgOiAnMCcgKyBuZXcgRGF0ZSgpLmdldE1pbnV0ZXMoKTtcbiAgICAgIGNvbnN0IHNlYyA9IG5ldyBEYXRlKCkuZ2V0U2Vjb25kcygpID4gOSA/IG5ldyBEYXRlKCkuZ2V0U2Vjb25kcygpIDogJzAnICsgbmV3IERhdGUoKS5nZXRTZWNvbmRzKCk7XG4gICAgICBpZiAodGhpcy50eXBlID09PSAnaGgnIHx8IHRoaXMudHlwZSA9PT0gJ2hobW0nIHx8IHRoaXMudHlwZSA9PT0gJ2hobW1zcycgfHwgdGhpcy50eXBlID09PSAnaGhtbXNzYW0nKSB7XG4gICAgICAgIGlmIChob3VyID49IDEyKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IGFtSG91ciArICc6JyArIG1pbiArICc6JyArIHNlYyArICcgJyArIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucG0nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gYW1Ib3VyICsgJzonICsgbWluICsgJzonICsgc2VjICsgJyAnICsgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5hbScpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gJ2hoYW0nKSB7XG4gICAgICAgIGlmIChob3VyID49IDEyKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IGFtSG91ciArICcgJyArIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucG0nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gYW1Ib3VyICsgJyAnICsgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5hbScpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gJ2hobW1hbScpIHtcbiAgICAgICAgaWYgKGhvdXIgPj0gMTIpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gYW1Ib3VyICsgJzonICsgbWluICsgJyAnICsgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5wbScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBhbUhvdXIgKyAnOicgKyBtaW4gKyAnICcgKyBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmFtJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBob3VyICsgJzonICsgbWluICsgJzonICsgc2VjO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uU3RhcnRmb2N1cygpIHtcbiAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuY2FyZXRDb2xvciA9ICd0cmFuc3BhcmVudCc7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCAwKTtcbiAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSAwO1xuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnN0eWxlLmNhcmV0Q29sb3IgPSAnYXV0byc7XG4gICAgfSwgMCk7XG4gIH1cblxuICBoYW5kbGVJbnB1dEZvY3VzKCkge1xuICAgIHRoaXMub25TdGFydGZvY3VzKCk7XG4gICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cbiAgaGFuZGxlSW5wdXRCbHVyKGUpIHtcbiAgICBpZiAodGhpcy50ZXh0VmFsdWUuaW5kZXhPZignLScpICE9PSAtMSkge1xuICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnSEhtbXNzJzpcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9ICctLTotLTotLSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0hIbW0nOlxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJy0tOi0tJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnSEgnOlxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJy0tJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaGhtbXNzJzpcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9ICctLTotLTotLSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2hobW0nOlxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJy0tOi0tJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJy0tJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaGhtbXNzYW0nOlxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy52YWx1ZVNhbTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaGhtbWFtJzpcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHRoaXMudmFsdWVNYW07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2hoYW0nOlxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy52YWx1ZUhhbTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYW5kbGVLZXlQcmVzcyhldmVudDogYW55KSB7XG4gICAgY29uc3QgaW5wdXRDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSk7XG4gICAgY29uc3QgZmlyc3RDaGFyID0gdGhpcy50ZXh0VmFsdWUuY2hhckF0KDApO1xuICAgIGNvbnN0IHNlY29uZENoYXIgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoMSk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgfHwgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0ID09PSAwKSB7XG4gICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICAgIC8vIHRoaXMuY3Vyc29yUG9zaXRpb24gKz0gMSA7XG4gICAgICB9XG4gICAgfSwgMCk7XG5cbiAgICBpZiAoZmlyc3RDaGFyID09PSAnMicpIHtcbiAgICAgIGlmIChzZWNvbmRDaGFyID09PSAnJyB8fCB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoMSkgPj0gJzQnIHx8IHRoaXMuY3Vyc29yUG9zaXRpb24gPCAzKSB7XG4gICAgICAgIGlmIChpbnB1dENoYXIgPj0gJzQnKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzIHx8XG4gICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbSB8fFxuICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhoIHx8XG4gICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzYW0gfHxcbiAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tYW0gfHxcbiAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaGFtXG4gICAgKSB7XG4gICAgICBpZiAoZmlyc3RDaGFyID09PSAnMScpIHtcbiAgICAgICAgaWYgKHNlY29uZENoYXIgPT09ICcnIHx8IHRoaXMudGV4dFZhbHVlLmNoYXJBdCgxKSA+PSAnMycgfHwgdGhpcy5jdXJzb3JQb3NpdGlvbiA8IDMpIHtcbiAgICAgICAgICBpZiAoaW5wdXRDaGFyID49ICczJykge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlucHV0Q2hhciA9PT0gJy0nKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUtleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zdHlsZS5jYXJldENvbG9yID0gJ2F1dG8nO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgICAvLyB1cCAmIGRvd24gYnV0dG9uXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICB0aGlzLnNldENhcmV0KCk7XG4gICAgfVxuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICB0aGlzLnNldENhcmV0KCk7XG4gICAgfVxuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJyB8fCBldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIGxlZnQgJiByaWdodCBCdXR0b25cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0JyB8fCBldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgaWYgKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCB8fCB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgPT09IDApIHtcbiAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA9IHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBob21lIGJ1dHRvblxuICAgIGlmIChldmVudC5rZXkgPT09ICdIb21lJykge1xuICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA9IDA7XG4gICAgfVxuXG4gICAgLy8gZW5kIGJ1dHRvblxuICAgIGlmIChldmVudC5rZXkgPT09ICdFbmQnKSB7XG4gICAgICBpZiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zc2FtIHx8IHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tYW0gfHwgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhoYW0pIHtcbiAgICAgICAgaWYgKHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tc3NhbSkge1xuICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSA5O1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgdGhpcy5jdXJzb3JQb3NpdGlvbik7XG4gICAgICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuY2FyZXRDb2xvciA9ICdhdXRvJztcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1hbSkge1xuICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSA2O1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgdGhpcy5jdXJzb3JQb3NpdGlvbik7XG4gICAgICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuY2FyZXRDb2xvciA9ICdhdXRvJztcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhoYW0pIHtcbiAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gMztcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIHRoaXMuY3Vyc29yUG9zaXRpb24pO1xuICAgICAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnN0eWxlLmNhcmV0Q29sb3IgPSAnYXV0byc7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSB0aGlzLnRleHRWYWx1ZS5sZW5ndGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYmFja3NwYWNlIENvbnRyb2xcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJykge1xuICAgICAgY29uc3QgaW5kMSA9IHRoaXMudGV4dFZhbHVlLmNoYXJBdCgwKTtcbiAgICAgIGNvbnN0IGluZDIgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoMSk7XG4gICAgICBjb25zdCBpbmQzID0gdGhpcy50ZXh0VmFsdWUuY2hhckF0KDIpO1xuICAgICAgY29uc3QgaW5kNCA9IHRoaXMudGV4dFZhbHVlLmNoYXJBdCgzKTtcbiAgICAgIGNvbnN0IGluZDUgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoNCk7XG4gICAgICBjb25zdCBpbmQ2ID0gdGhpcy50ZXh0VmFsdWUuY2hhckF0KDUpO1xuICAgICAgY29uc3QgaW5kNyA9IHRoaXMudGV4dFZhbHVlLmNoYXJBdCg2KTtcbiAgICAgIGNvbnN0IGluZDggPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoNyk7XG4gICAgICBjb25zdCBpbmQ5ID0gdGhpcy50ZXh0VmFsdWUuY2hhckF0KDgpO1xuICAgICAgY29uc3QgaW5kMTAgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoOSk7XG4gICAgICBpZiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zc2FtKSB7XG4gICAgICAgIGlmIChpbmQxMCA9PT0gJy0nKSB7XG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSBpbmQxICsgaW5kMiArIGluZDMgKyBpbmQ0ICsgaW5kNSArIGluZDYgKyBpbmQ3ICsgaW5kOCArIGluZDkgKyBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmFtJyk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCAwKTtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSAwO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1hbSkge1xuICAgICAgICBpZiAoaW5kNyA9PT0gJy0nKSB7XG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSBpbmQxICsgaW5kMiArIGluZDMgKyBpbmQ0ICsgaW5kNSArIGluZDYgKyBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmFtJyk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCAwKTtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSAwO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhoYW0pIHtcbiAgICAgICAgaWYgKGluZDQgPT09ICctJykge1xuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gaW5kMSArIGluZDIgKyBpbmQzICsgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5hbScpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgMCk7XG4gICAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gMDtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy50ZXh0VmFsdWUubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uIC09IDE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFbmQnKSB7XG4gICAgICBpZiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zc2FtIHx8IHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tYW0gfHwgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhoYW0pIHtcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnN0eWxlLmNhcmV0Q29sb3IgPSAndHJhbnNwYXJlbnQnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnN0eWxlLmNhcmV0Q29sb3IgPSAnYXV0byc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IG5ld1ZhbHVlID0gdGhpcy50ZXh0VmFsdWU7XG5cbiAgICBjb25zdCBpbmQxID0gbmV3VmFsdWUuY2hhckF0KDApO1xuICAgIGNvbnN0IGluZDIgPSBuZXdWYWx1ZS5jaGFyQXQoMSk7XG4gICAgY29uc3QgaW5kMyA9IHRoaXMudGV4dFZhbHVlLmNoYXJBdCgyKTtcbiAgICBjb25zdCBpbmQ0ID0gdGhpcy50ZXh0VmFsdWUuY2hhckF0KDMpO1xuICAgIGNvbnN0IGluZDUgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoNCk7XG4gICAgY29uc3QgaW5kNiA9IHRoaXMudGV4dFZhbHVlLmNoYXJBdCg1KTtcbiAgICBjb25zdCBpbmQ3ID0gdGhpcy50ZXh0VmFsdWUuY2hhckF0KDYpO1xuICAgIGNvbnN0IGluZDggPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoNyk7XG4gICAgY29uc3QgaW5kOSA9IHRoaXMudGV4dFZhbHVlLmNoYXJBdCg4KTtcbiAgICBjb25zdCBpbmQxMCA9IHRoaXMudGV4dFZhbHVlLmNoYXJBdCg5KTtcbiAgICBjb25zdCBpbmQxMSA9IHRoaXMudGV4dFZhbHVlLmNoYXJBdCgxMCk7XG5cbiAgICAvLyB1cCBrZXlcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgIC8vIGhvdXJcbiAgICAgIGlmICh0aGlzLmN1cnNvclBvc2l0aW9uIDw9IDIpIHtcbiAgICAgICAgY29uc3QgaG91cmluZCA9IGluZDEgKyBpbmQyO1xuICAgICAgICBjb25zdCBuZXdIb3VyID0gK2hvdXJpbmQgKyAxO1xuICAgICAgICBuZXdWYWx1ZSA9IG5ld0hvdXIudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tc3MgfHxcbiAgICAgICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbSB8fFxuICAgICAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaCB8fFxuICAgICAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tc3NhbSB8fFxuICAgICAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tYW0gfHxcbiAgICAgICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhhbVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoaG91cmluZCA9PT0gJy0tJykge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpbmQxICE9PSAnLScgJiYgaG91cmluZCA9PT0gaW5kMSArICctJykge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpbmQyICE9PSAnLScgJiYgaG91cmluZCA9PT0gJy0nICsgaW5kMikge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgrbmV3VmFsdWUgPiAxMikge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSAnMDEnO1xuICAgICAgICAgIH0gZWxzZSBpZiAoK25ld1ZhbHVlIDwgMTApIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gJzAnICsgbmV3VmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChob3VyaW5kID09PSAnLS0nKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGluZDEgIT09ICctJyAmJiBob3VyaW5kID09PSBpbmQxICsgJy0nKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGluZDIgIT09ICctJyAmJiBob3VyaW5kID09PSAnLScgKyBpbmQyKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCtuZXdWYWx1ZSA+IDIzKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwMCc7XG4gICAgICAgICAgfSBlbHNlIGlmICgrbmV3VmFsdWUgPCAxMCkge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSAnMCcgKyBuZXdWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWZ0ZXJIb3VyaW5kID0gaW5kMyArIGluZDQgKyBpbmQ1ICsgaW5kNiArIGluZDcgKyBpbmQ4ICsgaW5kOSArIGluZDEwICsgaW5kMTE7XG4gICAgICAgIGNvbnN0IGhvdXIgPSBuZXdWYWx1ZS50b1N0cmluZygpICsgYWZ0ZXJIb3VyaW5kO1xuICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IGhvdXI7XG4gICAgICB9XG4gICAgICAvLyBtaW51dGVcbiAgICAgIGlmICh0aGlzLmN1cnNvclBvc2l0aW9uID49IDMgJiYgdGhpcy5jdXJzb3JQb3NpdGlvbiA8PSA1KSB7XG4gICAgICAgIGNvbnN0IGhvdXJpbmQgPSBpbmQ0ICsgaW5kNTtcbiAgICAgICAgY29uc3QgbmV3SG91ciA9ICtob3VyaW5kICsgMTtcblxuICAgICAgICBuZXdWYWx1ZSA9IG5ld0hvdXIudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKGhvdXJpbmQgPT09ICctLScpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kNCAhPT0gJy0nICYmIGhvdXJpbmQgPT09IGluZDQgKyAnLScpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kNSAhPT0gJy0nICYmIGhvdXJpbmQgPT09ICctJyArIGluZDUpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoK25ld1ZhbHVlID4gNTkpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9ICcwMCc7XG4gICAgICAgIH0gZWxzZSBpZiAoK25ld1ZhbHVlIDwgMTApIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9ICcwJyArIG5ld1ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJlZm9yZUhvdXJpbmQgPSBpbmQxICsgaW5kMiArIGluZDM7XG4gICAgICAgIGNvbnN0IGFmdGVySG91cmluZCA9IGluZDYgKyBpbmQ3ICsgaW5kOCArIGluZDkgKyBpbmQxMCArIGluZDExO1xuICAgICAgICBjb25zdCBtaW51dGUgPSBiZWZvcmVIb3VyaW5kICsgbmV3VmFsdWUudG9TdHJpbmcoKSArIGFmdGVySG91cmluZDtcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSBtaW51dGU7XG4gICAgICB9XG5cbiAgICAgIC8vIHNlY29uZFxuICAgICAgaWYgKHRoaXMuY3Vyc29yUG9zaXRpb24gPj0gNiAmJiB0aGlzLmN1cnNvclBvc2l0aW9uIDw9IDgpIHtcbiAgICAgICAgY29uc3Qgc2Vjb25kaW5kID0gaW5kNyArIGluZDg7XG4gICAgICAgIGNvbnN0IG5ld1NlY29uZCA9ICtzZWNvbmRpbmQgKyAxO1xuXG4gICAgICAgIG5ld1ZhbHVlID0gbmV3U2Vjb25kLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChzZWNvbmRpbmQgPT09ICctLScpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kNyAhPT0gJy0nICYmIHNlY29uZGluZCA9PT0gaW5kNyArICctJykge1xuICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmQ4ICE9PSAnLScgJiYgc2Vjb25kaW5kID09PSAnLScgKyBpbmQ4KSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCtuZXdWYWx1ZSA+IDU5KSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSAnMDAnO1xuICAgICAgICB9IGVsc2UgaWYgKCtuZXdWYWx1ZSA8IDEwKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSAnMCcgKyBuZXdWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiZWZvcmVIb3VyaW5kID0gaW5kMSArIGluZDIgKyBpbmQzICsgaW5kNCArIGluZDUgKyBpbmQ2O1xuICAgICAgICBjb25zdCBhZnRlckhvdXJpbmQgPSBpbmQ5ICsgaW5kMTAgKyBpbmQxMTtcbiAgICAgICAgY29uc3Qgc2Vjb25kID0gYmVmb3JlSG91cmluZCArIG5ld1ZhbHVlLnRvU3RyaW5nKCkgKyBhZnRlckhvdXJpbmQ7XG4gICAgICAgIHRoaXMudGV4dFZhbHVlID0gc2Vjb25kO1xuICAgICAgfVxuXG4gICAgICAvLyB0eXBlIGFtL1BNXG4gICAgICBpZiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zc2FtKSB7XG4gICAgICAgIGlmICh0aGlzLmN1cnNvclBvc2l0aW9uID4gOCkge1xuICAgICAgICAgIGxldCB0eXBlaW5kID0gaW5kMTAudG9TdHJpbmcoKTtcblxuICAgICAgICAgIGNvbnN0IGJlZm9yZUhvdXJpbmQgPSBpbmQxICsgaW5kMiArIGluZDMgKyBpbmQ0ICsgaW5kNSArIGluZDYgKyBpbmQ3ICsgaW5kOCArIGluZDk7XG4gICAgICAgICAgY29uc3QgYWZ0ZXJIb3VyaW5kID0gaW5kMTE7XG5cbiAgICAgICAgICBpZiAoaW5kMTAgPT09IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucCcpKSB7XG4gICAgICAgICAgICB0eXBlaW5kID0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5hJyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpbmQxMCA9PT0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5hJykpIHtcbiAgICAgICAgICAgIHR5cGVpbmQgPSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLnAnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSBiZWZvcmVIb3VyaW5kICsgdHlwZWluZCArIGFmdGVySG91cmluZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tYW0pIHtcbiAgICAgICAgaWYgKHRoaXMuY3Vyc29yUG9zaXRpb24gPj0gNikge1xuICAgICAgICAgIGxldCB0eXBlaW5kID0gaW5kNy50b1N0cmluZygpO1xuXG4gICAgICAgICAgY29uc3QgYmVmb3JlSG91cmluZCA9IGluZDEgKyBpbmQyICsgaW5kMyArIGluZDQgKyBpbmQ1ICsgaW5kNjtcbiAgICAgICAgICBjb25zdCBhZnRlckhvdXJpbmQgPSBpbmQ4O1xuXG4gICAgICAgICAgaWYgKGluZDcgPT09IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucCcpKSB7XG4gICAgICAgICAgICB0eXBlaW5kID0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5hJyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpbmQ3ID09PSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmEnKSkge1xuICAgICAgICAgICAgdHlwZWluZCA9IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IGJlZm9yZUhvdXJpbmQgKyB0eXBlaW5kICsgYWZ0ZXJIb3VyaW5kO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhoYW0pIHtcbiAgICAgICAgaWYgKHRoaXMuY3Vyc29yUG9zaXRpb24gPj0gMykge1xuICAgICAgICAgIGxldCB0eXBlaW5kMiA9IGluZDQudG9TdHJpbmcoKTtcblxuICAgICAgICAgIGNvbnN0IGJlZm9yZUhvdXJpbmQgPSBpbmQxICsgaW5kMiArIGluZDM7XG4gICAgICAgICAgY29uc3QgYWZ0ZXJIb3VyaW5kID0gaW5kNTtcblxuICAgICAgICAgIGlmIChpbmQ0ID09PSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLnAnKSkge1xuICAgICAgICAgICAgdHlwZWluZDIgPSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmEnKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGluZDQgPT09IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYScpKSB7XG4gICAgICAgICAgICB0eXBlaW5kMiA9IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IGJlZm9yZUhvdXJpbmQgKyB0eXBlaW5kMiArIGFmdGVySG91cmluZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGtleSBkb3duXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgIC8vIGhvdXJcbiAgICAgIGlmICh0aGlzLmN1cnNvclBvc2l0aW9uIDw9IDIpIHtcbiAgICAgICAgY29uc3QgaG91cmluZCA9IGluZDEgKyBpbmQyO1xuICAgICAgICBjb25zdCBuZXdIb3VyID0gK2hvdXJpbmQgLSAxO1xuXG4gICAgICAgIG5ld1ZhbHVlID0gbmV3SG91ci50b1N0cmluZygpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zcyB8fFxuICAgICAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tIHx8XG4gICAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhoIHx8XG4gICAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zc2FtIHx8XG4gICAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1hbSB8fFxuICAgICAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaGFtXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChob3VyaW5kID09PSAnLS0nKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGluZDEgIT09ICctJyAmJiBob3VyaW5kID09PSBpbmQxICsgJy0nKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGluZDIgIT09ICctJyAmJiBob3VyaW5kID09PSAnLScgKyBpbmQyKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCtuZXdWYWx1ZSA8IDEpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gJzEyJztcbiAgICAgICAgICB9IGVsc2UgaWYgKCtuZXdWYWx1ZSA8IDEwKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJyArIG5ld1ZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoaG91cmluZCA9PT0gJy0tJykge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpbmQxICE9PSAnLScgJiYgaG91cmluZCA9PT0gaW5kMSArICctJykge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpbmQyICE9PSAnLScgJiYgaG91cmluZCA9PT0gJy0nICsgaW5kMikge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgrbmV3VmFsdWUgPCAwKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcyMyc7XG4gICAgICAgICAgfSBlbHNlIGlmICgrbmV3VmFsdWUgPCAxMCkge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSAnMCcgKyBuZXdWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWZ0ZXJIb3VySW5kZXggPSBpbmQzICsgaW5kNCArIGluZDUgKyBpbmQ2ICsgaW5kNyArIGluZDggKyBpbmQ5ICsgaW5kMTAgKyBpbmQxMTtcbiAgICAgICAgY29uc3QgaG91ciA9IG5ld1ZhbHVlLnRvU3RyaW5nKCkgKyBhZnRlckhvdXJJbmRleDtcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSBob3VyO1xuICAgICAgfVxuICAgICAgLy8gbWludXRlXG4gICAgICBpZiAodGhpcy5jdXJzb3JQb3NpdGlvbiA+PSAzICYmIHRoaXMuY3Vyc29yUG9zaXRpb24gPD0gNSkge1xuICAgICAgICBjb25zdCBtaW51dGVpbmQgPSBpbmQ0ICsgaW5kNTtcbiAgICAgICAgY29uc3QgbmV3TWludXRlID0gK21pbnV0ZWluZCAtIDE7XG5cbiAgICAgICAgbmV3VmFsdWUgPSBuZXdNaW51dGUudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKG1pbnV0ZWluZCA9PT0gJy0tJykge1xuICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmQ0ICE9PSAnLScgJiYgbWludXRlaW5kID09PSBpbmQ0ICsgJy0nKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZDUgIT09ICctJyAmJiBtaW51dGVpbmQgPT09ICctJyArIGluZDUpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcbiAgICAgICAgfVxuICAgICAgICBpZiAobWludXRlaW5kID09PSAnLS0nKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCtuZXdWYWx1ZSA8IDApIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9ICc1OSc7XG4gICAgICAgIH0gZWxzZSBpZiAoK25ld1ZhbHVlIDwgMTApIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9ICcwJyArIG5ld1ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJlZm9yZU1pbnV0ZUluZGV4ID0gaW5kMSArIGluZDIgKyBpbmQzO1xuICAgICAgICBjb25zdCBhZnRlck1pbnV0ZUluZGV4ID0gaW5kNiArIGluZDcgKyBpbmQ4ICsgaW5kOSArIGluZDEwICsgaW5kMTE7XG4gICAgICAgIGNvbnN0IG1pbnV0ZSA9IGJlZm9yZU1pbnV0ZUluZGV4ICsgbmV3VmFsdWUudG9TdHJpbmcoKSArIGFmdGVyTWludXRlSW5kZXg7XG4gICAgICAgIHRoaXMudGV4dFZhbHVlID0gbWludXRlO1xuICAgICAgfVxuXG4gICAgICAvLyBzZWNvbmRcbiAgICAgIGlmICh0aGlzLmN1cnNvclBvc2l0aW9uID49IDYgJiYgdGhpcy5jdXJzb3JQb3NpdGlvbiA8PSA4KSB7XG4gICAgICAgIGNvbnN0IHNlY29uZEluZGV4ID0gaW5kNyArIGluZDg7XG4gICAgICAgIGNvbnN0IG5ld1NlY29uZCA9ICtzZWNvbmRJbmRleCAtIDE7XG5cbiAgICAgICAgbmV3VmFsdWUgPSBuZXdTZWNvbmQudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKHNlY29uZEluZGV4ID09PSAnLS0nKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZDcgIT09ICctJyAmJiBzZWNvbmRJbmRleCA9PT0gaW5kNyArICctJykge1xuICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmQ4ICE9PSAnLScgJiYgc2Vjb25kSW5kZXggPT09ICctJyArIGluZDgpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Vjb25kSW5kZXggPT09ICctLScpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoK25ld1ZhbHVlIDwgMCkge1xuICAgICAgICAgIG5ld1ZhbHVlID0gJzU5JztcbiAgICAgICAgfSBlbHNlIGlmICgrbmV3VmFsdWUgPCAxMCkge1xuICAgICAgICAgIG5ld1ZhbHVlID0gJzAnICsgbmV3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmVmb3Jlc2Vjb25kSW5kZXggPSBpbmQxICsgaW5kMiArIGluZDMgKyBpbmQ0ICsgaW5kNSArIGluZDY7XG4gICAgICAgIGNvbnN0IGFmdGVyc2Vjb25kSW5kZXggPSBpbmQ5ICsgaW5kMTAgKyBpbmQxMTtcbiAgICAgICAgY29uc3Qgc2Vjb25kID0gYmVmb3Jlc2Vjb25kSW5kZXggKyBuZXdWYWx1ZS50b1N0cmluZygpICsgYWZ0ZXJzZWNvbmRJbmRleDtcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSBzZWNvbmQ7XG4gICAgICB9XG5cbiAgICAgIC8vIHR5cGVcbiAgICAgIGlmICh0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzYW0pIHtcbiAgICAgICAgaWYgKHRoaXMuY3Vyc29yUG9zaXRpb24gPiA4KSB7XG4gICAgICAgICAgbGV0IHR5cGVpbmQgPSBpbmQxMC50b1N0cmluZygpO1xuXG4gICAgICAgICAgY29uc3QgYmVmb3JlSG91cmluZCA9IGluZDEgKyBpbmQyICsgaW5kMyArIGluZDQgKyBpbmQ1ICsgaW5kNiArIGluZDcgKyBpbmQ4ICsgaW5kOTtcbiAgICAgICAgICBjb25zdCBhZnRlckhvdXJpbmQgPSBpbmQxMTtcblxuICAgICAgICAgIGlmIChpbmQxMCA9PT0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5wJykpIHtcbiAgICAgICAgICAgIHR5cGVpbmQgPSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmEnKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGluZDEwID09PSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmEnKSkge1xuICAgICAgICAgICAgdHlwZWluZCA9IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IGJlZm9yZUhvdXJpbmQgKyB0eXBlaW5kICsgYWZ0ZXJIb3VyaW5kO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1hbSkge1xuICAgICAgICBpZiAodGhpcy5jdXJzb3JQb3NpdGlvbiA+PSA2KSB7XG4gICAgICAgICAgbGV0IHR5cGVpbmQgPSBpbmQ3LnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICBjb25zdCBiZWZvcmVIb3VyaW5kID0gaW5kMSArIGluZDIgKyBpbmQzICsgaW5kNCArIGluZDUgKyBpbmQ2O1xuICAgICAgICAgIGNvbnN0IGFmdGVySG91cmluZCA9IGluZDg7XG5cbiAgICAgICAgICBpZiAoaW5kNyA9PT0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5wJykpIHtcbiAgICAgICAgICAgIHR5cGVpbmQgPSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmEnKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGluZDcgPT09IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYScpKSB7XG4gICAgICAgICAgICB0eXBlaW5kID0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5wJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gYmVmb3JlSG91cmluZCArIHR5cGVpbmQgKyBhZnRlckhvdXJpbmQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhhbSkge1xuICAgICAgICBpZiAodGhpcy5jdXJzb3JQb3NpdGlvbiA+PSAzKSB7XG4gICAgICAgICAgbGV0IHR5cGVpbmQyID0gaW5kNC50b1N0cmluZygpO1xuXG4gICAgICAgICAgY29uc3QgYmVmb3JlSG91cmluZCA9IGluZDEgKyBpbmQyICsgaW5kMztcbiAgICAgICAgICBjb25zdCBhZnRlckhvdXJpbmQgPSBpbmQ1O1xuICAgICAgICAgIC8vVE8gRE8gdGhpcyBpcyB3cm9uZyBjaGVjayBpbmRleFxuICAgICAgICAgIGlmIChpbmQ0ID09PSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLnAnKSkge1xuICAgICAgICAgICAgdHlwZWluZDIgPSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmEnKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGluZDQgPT09IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYScpKSB7XG4gICAgICAgICAgICB0eXBlaW5kMiA9IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IGJlZm9yZUhvdXJpbmQgKyB0eXBlaW5kMiArIGFmdGVySG91cmluZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJyB8fCBldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuY2FyZXRDb2xvciA9ICd0cmFuc3BhcmVudCc7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChldmVudC5rZXkgPT09ICdEZWxldGUnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUNsaWNrKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCB8fCB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgPT09IDApIHtcbiAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgfVxuICB9XG5cbiAgZG9HZXRDYXJldFBvc2l0aW9uKGN0cmwpIHtcbiAgICBsZXQgQ2FyZXRQb3MgPSAwO1xuICAgIGlmIChjdHJsLnNlbGVjdGlvblN0YXJ0IHx8IGN0cmwuc2VsZWN0aW9uU3RhcnQgPT09IDApIHtcbiAgICAgIENhcmV0UG9zID0gY3RybC5zZWxlY3Rpb25TdGFydDtcbiAgICAgIHJldHVybiBDYXJldFBvcztcbiAgICB9XG4gIH1cblxuICBzZXRDYXJldFBvc2l0aW9uKGN0cmwsIHBvcykge1xuICAgIGlmIChjdHJsLnNldFNlbGVjdGlvblJhbmdlKSB7XG4gICAgICBjdHJsLmZvY3VzKCk7XG4gICAgICBjdHJsLnNldFNlbGVjdGlvblJhbmdlKHBvcywgcG9zKTtcbiAgICB9IGVsc2UgaWYgKGN0cmwuY3JlYXRlVGV4dFJhbmdlKSB7XG4gICAgICBjb25zdCByYW5nZSA9IGN0cmwuY3JlYXRlVGV4dFJhbmdlKCk7XG4gICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTtcbiAgICAgIHJhbmdlLm1vdmVFbmQoJ2NoYXJhY3RlcicsIHBvcyk7XG4gICAgICByYW5nZS5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsIHBvcyk7XG4gICAgICByYW5nZS5zZWxlY3QoKTtcbiAgICB9XG4gIH1cblxuICBzZXRDYXJldCgpIHtcbiAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCB0aGlzLmN1cnNvclBvc2l0aW9uKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImF4IGZvcm0taXRlbVwiIFtjbGFzcy5kaXNhYmxlZF09XCJkaXNhYmxlZFwiIFthdHRyLmlkXT1cInVpZFwiICNmYz5cbiAgICA8ZGl2IGNsYXNzPVwiYXggaXRlbXMtd3JhcHBlclwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbc3RhcnRdXCI+XG4gICAgICAgIDwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiICNjb250ZW50PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXggZm9ybS1jb250cm9sIGlucHV0IHt7c2l6ZX19XCIgW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVkXCIgW2NsYXNzLnJlYWRvbmx5XT1cInJlYWRvbmx5XCIgW2NsYXNzLmljb25dPVwiaWNvblwiPlxuICAgICAgICAgICAgPGlucHV0ICNpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiYXgge3tzaXplfX1cIiBbdGV4dE1hc2tdPVwidGltZVR5cGVcIiBbKG5nTW9kZWwpXT1cInRleHRWYWx1ZVwiIHBsYWNlaG9sZGVyPVwie3twbGFjZWhvbGRlcn19XCIgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW25nQ2xhc3NdPVwic2V0VGV4dEFsaWduKClcIiBbY2xhc3MuY2xlYXJdPVwidmFsdWUgJiYgYWxsb3dDbGVhclwiIChmb2N1cyk9XCJoYW5kbGVJbnB1dEZvY3VzKClcIlxuICAgICAgICAgICAgICAgIChibHVyKT1cImhhbmRsZUlucHV0Qmx1cigkZXZlbnQpXCIgKGtleXByZXNzKT0naGFuZGxlS2V5UHJlc3MoJGV2ZW50KScgKGtleXVwKT1cImhhbmRsZUtleVVwKCRldmVudClcIiAoa2V5ZG93bik9XCJoYW5kbGVLZXlEb3duKCRldmVudClcIiAoY2xpY2spPVwiaGFuZGxlQ2xpY2soJGV2ZW50KVwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJ7e2ljb259fVwiICpuZ0lmPVwiaWNvblwiPjwvaT5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImF4IGl0ZW1zLXdyYXBwZXJcIj5cbiAgICAgICAgPGF4LWJ1dHRvbiAqbmdJZj1cInZhbHVlICYmIGFsbG93Q2xlYXJcIiBpY29uPVwiZmFyIGZhLXRpbWVzXCIgdHlwZT1cImRhbmdlciBibGFua1wiIChjbGljayk9XCJjbGVhcigpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW3RhYkluZGV4XT1cIi0xXCI+PC9heC1idXR0b24+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltlbmRdXCI+XG4gICAgICAgIDwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPCEtLSBbdGV4dE1hc2tdPVwie21hc2s6IG1hc2sgLCBzaG93TWFzazpzaG93TWFzayAsIGd1aWQ6IG1hc2tHdWlkICwga2VlcENoYXJQb3NpdGlvbnM6IG1hc2tLZWVwQ2hhclBvc2l0aW9uc31cIiAtLT5cbjwhLS0gPGlucHV0ICNpbnB1dCBpZD1cInRpbWVQaWNrZXJWYWx1ZVwiIFt0ZXh0TWFza109XCJ0aW1lVHlwZVwiIHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiIChrZXlwcmVzcyk9J2hhbmRsZUtleVByZXNzKCRldmVudCknXG4gICAgKGtleXVwKT1cImhhbmRsZUtleVVwKCRldmVudClcIiAoa2V5ZG93bik9XCJoYW5kbGVLZXlEb3duKCRldmVudClcIiAoY2xpY2spPVwiaGFuZGxlQ2xpY2soJGV2ZW50KVwiPiAtLT4iXX0=