ngx-hana-nameserver-history-viewer 1.1.1 → 1.1.90

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 (242) hide show
  1. package/README.md +7 -6
  2. package/esm2020/ngx-hana-nameserver-history-viewer.mjs +5 -0
  3. package/esm2020/public-api.mjs +2 -0
  4. package/esm2020/src/nameserver-history-viewer/components/alert/alert.component.mjs +68 -0
  5. package/esm2020/src/nameserver-history-viewer/components/alert/alert.module.mjs +22 -0
  6. package/esm2020/src/nameserver-history-viewer/components/alert/index.mjs +3 -0
  7. package/esm2020/src/nameserver-history-viewer/components/file-drop-input/file-drop-input.component.mjs +112 -0
  8. package/esm2020/src/nameserver-history-viewer/components/file-drop-input/index.mjs +2 -0
  9. package/esm2020/src/nameserver-history-viewer/components/index.mjs +9 -0
  10. package/esm2020/src/nameserver-history-viewer/components/instruction/index.mjs +2 -0
  11. package/esm2020/src/nameserver-history-viewer/components/instruction/instruction.component.mjs +42 -0
  12. package/esm2020/src/nameserver-history-viewer/components/nameserver-history.component.mjs +550 -0
  13. package/esm2020/src/nameserver-history-viewer/components/port-selector/index.mjs +2 -0
  14. package/esm2020/src/nameserver-history-viewer/components/port-selector/port-selector.component.mjs +69 -0
  15. package/esm2020/src/nameserver-history-viewer/components/port-selector/port-selector.service.mjs +41 -0
  16. package/esm2020/src/nameserver-history-viewer/components/progress-bar/index.mjs +2 -0
  17. package/esm2020/src/nameserver-history-viewer/components/progress-bar/progress-bar.component.mjs +40 -0
  18. package/esm2020/src/nameserver-history-viewer/components/time-range-selector/index.mjs +2 -0
  19. package/esm2020/src/nameserver-history-viewer/components/time-range-selector/time-range-selector.component.mjs +70 -0
  20. package/esm2020/src/nameserver-history-viewer/components/timezone-selector/index.mjs +2 -0
  21. package/esm2020/src/nameserver-history-viewer/components/timezone-selector/timezone-selector.component.mjs +90 -0
  22. package/esm2020/src/nameserver-history-viewer/components/timezone-selector/timezone-selector.service.mjs +49 -0
  23. package/esm2020/src/nameserver-history-viewer/index.mjs +3 -0
  24. package/esm2020/src/nameserver-history-viewer/nameserver-history.module.mjs +63 -0
  25. package/esm2020/src/nameserver-history-viewer/services/chart.service.mjs +323 -0
  26. package/esm2020/src/nameserver-history-viewer/services/file.service.mjs +390 -0
  27. package/esm2020/src/nameserver-history-viewer/services/index.mjs +4 -0
  28. package/esm2020/src/nameserver-history-viewer/services/ui.service.mjs +557 -0
  29. package/esm2020/src/nameserver-history-viewer/types/abort.types.mjs +6 -0
  30. package/esm2020/src/nameserver-history-viewer/types/alert.types.mjs +8 -0
  31. package/esm2020/src/nameserver-history-viewer/types/chart-content-data-item.types.mjs +2 -0
  32. package/esm2020/src/nameserver-history-viewer/types/chart-content-data.types.mjs +2 -0
  33. package/esm2020/src/nameserver-history-viewer/types/chart-content-header.types.mjs +2 -0
  34. package/esm2020/src/nameserver-history-viewer/types/chart-content-time.types.mjs +2 -0
  35. package/esm2020/src/nameserver-history-viewer/types/chart-content.types.mjs +2 -0
  36. package/esm2020/src/nameserver-history-viewer/types/color-rgba.types.mjs +2 -0
  37. package/esm2020/src/nameserver-history-viewer/types/html-element.type.mjs +9 -0
  38. package/esm2020/src/nameserver-history-viewer/types/index.mjs +28 -0
  39. package/esm2020/src/nameserver-history-viewer/types/item.types.mjs +14 -0
  40. package/esm2020/src/nameserver-history-viewer/types/legend-color.types.mjs +2 -0
  41. package/esm2020/src/nameserver-history-viewer/types/load-history-info-backup.types.mjs +2 -0
  42. package/esm2020/src/nameserver-history-viewer/types/load-history-info-columnstore.types.mjs +2 -0
  43. package/esm2020/src/nameserver-history-viewer/types/load-history-info-host.types.mjs +2 -0
  44. package/esm2020/src/nameserver-history-viewer/types/load-history-info-item.types.mjs +2 -0
  45. package/esm2020/src/nameserver-history-viewer/types/load-history-info-persistence.types.mjs +2 -0
  46. package/esm2020/src/nameserver-history-viewer/types/load-history-info-rowstore.types.mjs +2 -0
  47. package/esm2020/src/nameserver-history-viewer/types/load-history-info-server.types.mjs +2 -0
  48. package/esm2020/src/nameserver-history-viewer/types/load-history-info-session-admission-control.types.mjs +2 -0
  49. package/esm2020/src/nameserver-history-viewer/types/load-history-info-sql.types.mjs +2 -0
  50. package/esm2020/src/nameserver-history-viewer/types/load-history-info-sync-primitives.types.mjs +2 -0
  51. package/esm2020/src/nameserver-history-viewer/types/load-history-info-threads.types.mjs +2 -0
  52. package/esm2020/src/nameserver-history-viewer/types/load-history-info.types.mjs +2 -0
  53. package/esm2020/src/nameserver-history-viewer/types/port.types.mjs +2 -0
  54. package/esm2020/src/nameserver-history-viewer/types/scale-group.types.mjs +17 -0
  55. package/esm2020/src/nameserver-history-viewer/types/unit-category.types.mjs +10 -0
  56. package/esm2020/src/nameserver-history-viewer/types/unit.types.mjs +14 -0
  57. package/esm2020/src/nameserver-history-viewer/utils/chart-util.mjs +25 -0
  58. package/esm2020/src/nameserver-history-viewer/utils/chartjs-downsample/chartjs_ext.mjs +2 -0
  59. package/esm2020/src/nameserver-history-viewer/utils/chartjs-downsample/data_culling.mjs +57 -0
  60. package/esm2020/src/nameserver-history-viewer/utils/chartjs-downsample/data_mipmap.mjs +139 -0
  61. package/esm2020/src/nameserver-history-viewer/utils/chartjs-downsample/index.mjs +41 -0
  62. package/esm2020/src/nameserver-history-viewer/utils/chartjs-downsample/lttb_data_mipmap.mjs +106 -0
  63. package/esm2020/src/nameserver-history-viewer/utils/chartjs-downsample/responsive_downsample_plugin.mjs +168 -0
  64. package/esm2020/src/nameserver-history-viewer/utils/chartjs-downsample/utils.mjs +114 -0
  65. package/esm2020/src/nameserver-history-viewer/utils/chartjs-zoom/chart.zoom.mjs +527 -0
  66. package/esm2020/src/nameserver-history-viewer/utils/chartjs-zoom/index.mjs +2 -0
  67. package/esm2020/src/nameserver-history-viewer/utils/file-util.mjs +154 -0
  68. package/esm2020/src/nameserver-history-viewer/utils/index.mjs +5 -0
  69. package/esm2020/src/nameserver-history-viewer/utils/time-util.mjs +101 -0
  70. package/esm2020/src/nameserver-history-viewer/utils/ui-util.mjs +162 -0
  71. package/fesm2015/ngx-hana-nameserver-history-viewer.mjs +4081 -0
  72. package/fesm2015/ngx-hana-nameserver-history-viewer.mjs.map +1 -0
  73. package/fesm2020/ngx-hana-nameserver-history-viewer.mjs +4081 -0
  74. package/fesm2020/ngx-hana-nameserver-history-viewer.mjs.map +1 -0
  75. package/ngx-hana-nameserver-history-viewer.d.ts +1 -1
  76. package/package.json +36 -61
  77. package/src/nameserver-history-viewer/components/alert/alert.component.d.ts +4 -1
  78. package/src/nameserver-history-viewer/components/alert/alert.module.d.ts +6 -0
  79. package/src/nameserver-history-viewer/components/file-drop-input/file-drop-input.component.d.ts +3 -0
  80. package/src/nameserver-history-viewer/components/instruction/instruction.component.d.ts +3 -0
  81. package/src/nameserver-history-viewer/components/nameserver-history.component.d.ts +33 -14
  82. package/src/nameserver-history-viewer/components/port-selector/port-selector.component.d.ts +4 -1
  83. package/src/nameserver-history-viewer/components/port-selector/port-selector.service.d.ts +3 -0
  84. package/src/nameserver-history-viewer/components/progress-bar/progress-bar.component.d.ts +3 -0
  85. package/src/nameserver-history-viewer/components/time-range-selector/time-range-selector.component.d.ts +3 -0
  86. package/src/nameserver-history-viewer/components/timezone-selector/timezone-selector.component.d.ts +3 -0
  87. package/src/nameserver-history-viewer/components/timezone-selector/timezone-selector.service.d.ts +3 -0
  88. package/src/nameserver-history-viewer/index.d.ts +1 -0
  89. package/src/nameserver-history-viewer/nameserver-history.module.d.ts +17 -0
  90. package/src/nameserver-history-viewer/services/chart.service.d.ts +4 -1
  91. package/src/nameserver-history-viewer/services/file.service.d.ts +4 -0
  92. package/src/nameserver-history-viewer/services/ui.service.d.ts +5 -2
  93. package/src/nameserver-history-viewer/types/load-history-info-session-admission-control.types.d.ts +3 -0
  94. package/src/nameserver-history-viewer/utils/chartjs-downsample/lttb_data_mipmap.d.ts +1 -1
  95. package/src/nameserver-history-viewer/utils/file-util.d.ts +11 -0
  96. package/bundles/ngx-hana-nameserver-history-viewer.umd.js +0 -6298
  97. package/bundles/ngx-hana-nameserver-history-viewer.umd.js.map +0 -1
  98. package/bundles/ngx-hana-nameserver-history-viewer.umd.min.js +0 -2
  99. package/bundles/ngx-hana-nameserver-history-viewer.umd.min.js.map +0 -1
  100. package/esm2015/ngx-hana-nameserver-history-viewer.js +0 -10
  101. package/esm2015/public-api.js +0 -6
  102. package/esm2015/src/nameserver-history-viewer/components/alert/alert.component.js +0 -108
  103. package/esm2015/src/nameserver-history-viewer/components/alert/alert.module.js +0 -21
  104. package/esm2015/src/nameserver-history-viewer/components/alert/index.js +0 -7
  105. package/esm2015/src/nameserver-history-viewer/components/file-drop-input/file-drop-input.component.js +0 -141
  106. package/esm2015/src/nameserver-history-viewer/components/file-drop-input/index.js +0 -6
  107. package/esm2015/src/nameserver-history-viewer/components/index.js +0 -13
  108. package/esm2015/src/nameserver-history-viewer/components/instruction/index.js +0 -6
  109. package/esm2015/src/nameserver-history-viewer/components/instruction/instruction.component.js +0 -62
  110. package/esm2015/src/nameserver-history-viewer/components/nameserver-history.component.js +0 -742
  111. package/esm2015/src/nameserver-history-viewer/components/port-selector/index.js +0 -6
  112. package/esm2015/src/nameserver-history-viewer/components/port-selector/port-selector.component.js +0 -93
  113. package/esm2015/src/nameserver-history-viewer/components/port-selector/port-selector.service.js +0 -56
  114. package/esm2015/src/nameserver-history-viewer/components/progress-bar/index.js +0 -6
  115. package/esm2015/src/nameserver-history-viewer/components/progress-bar/progress-bar.component.js +0 -35
  116. package/esm2015/src/nameserver-history-viewer/components/time-range-selector/index.js +0 -6
  117. package/esm2015/src/nameserver-history-viewer/components/time-range-selector/time-range-selector.component.js +0 -68
  118. package/esm2015/src/nameserver-history-viewer/components/timezone-selector/index.js +0 -6
  119. package/esm2015/src/nameserver-history-viewer/components/timezone-selector/timezone-selector.component.js +0 -135
  120. package/esm2015/src/nameserver-history-viewer/components/timezone-selector/timezone-selector.service.js +0 -72
  121. package/esm2015/src/nameserver-history-viewer/index.js +0 -6
  122. package/esm2015/src/nameserver-history-viewer/nameserver-history.module.js +0 -42
  123. package/esm2015/src/nameserver-history-viewer/services/chart.service.js +0 -423
  124. package/esm2015/src/nameserver-history-viewer/services/file.service.js +0 -447
  125. package/esm2015/src/nameserver-history-viewer/services/index.js +0 -8
  126. package/esm2015/src/nameserver-history-viewer/services/ui.service.js +0 -817
  127. package/esm2015/src/nameserver-history-viewer/types/abort.types.js +0 -13
  128. package/esm2015/src/nameserver-history-viewer/types/alert.types.js +0 -13
  129. package/esm2015/src/nameserver-history-viewer/types/chart-content-data-item.types.js +0 -15
  130. package/esm2015/src/nameserver-history-viewer/types/chart-content-data.types.js +0 -9
  131. package/esm2015/src/nameserver-history-viewer/types/chart-content-header.types.js +0 -15
  132. package/esm2015/src/nameserver-history-viewer/types/chart-content-time.types.js +0 -9
  133. package/esm2015/src/nameserver-history-viewer/types/chart-content.types.js +0 -21
  134. package/esm2015/src/nameserver-history-viewer/types/color-rgba.types.js +0 -19
  135. package/esm2015/src/nameserver-history-viewer/types/html-element.type.js +0 -19
  136. package/esm2015/src/nameserver-history-viewer/types/index.js +0 -32
  137. package/esm2015/src/nameserver-history-viewer/types/item.types.js +0 -19
  138. package/esm2015/src/nameserver-history-viewer/types/legend-color.types.js +0 -9
  139. package/esm2015/src/nameserver-history-viewer/types/load-history-info-backup.types.js +0 -19
  140. package/esm2015/src/nameserver-history-viewer/types/load-history-info-columnstore.types.js +0 -19
  141. package/esm2015/src/nameserver-history-viewer/types/load-history-info-host.types.js +0 -35
  142. package/esm2015/src/nameserver-history-viewer/types/load-history-info-item.types.js +0 -31
  143. package/esm2015/src/nameserver-history-viewer/types/load-history-info-persistence.types.js +0 -27
  144. package/esm2015/src/nameserver-history-viewer/types/load-history-info-rowstore.types.js +0 -15
  145. package/esm2015/src/nameserver-history-viewer/types/load-history-info-server.types.js +0 -25
  146. package/esm2015/src/nameserver-history-viewer/types/load-history-info-session-admission-control.types.js +0 -19
  147. package/esm2015/src/nameserver-history-viewer/types/load-history-info-sql.types.js +0 -37
  148. package/esm2015/src/nameserver-history-viewer/types/load-history-info-sync-primitives.types.js +0 -15
  149. package/esm2015/src/nameserver-history-viewer/types/load-history-info-threads.types.js +0 -23
  150. package/esm2015/src/nameserver-history-viewer/types/load-history-info.types.js +0 -31
  151. package/esm2015/src/nameserver-history-viewer/types/port.types.js +0 -17
  152. package/esm2015/src/nameserver-history-viewer/types/scale-group.types.js +0 -35
  153. package/esm2015/src/nameserver-history-viewer/types/unit-category.types.js +0 -21
  154. package/esm2015/src/nameserver-history-viewer/types/unit.types.js +0 -19
  155. package/esm2015/src/nameserver-history-viewer/utils/chart-util.js +0 -38
  156. package/esm2015/src/nameserver-history-viewer/utils/chartjs-downsample/chartjs_ext.js +0 -100
  157. package/esm2015/src/nameserver-history-viewer/utils/chartjs-downsample/data_culling.js +0 -88
  158. package/esm2015/src/nameserver-history-viewer/utils/chartjs-downsample/data_mipmap.js +0 -213
  159. package/esm2015/src/nameserver-history-viewer/utils/chartjs-downsample/index.js +0 -46
  160. package/esm2015/src/nameserver-history-viewer/utils/chartjs-downsample/lttb_data_mipmap.js +0 -158
  161. package/esm2015/src/nameserver-history-viewer/utils/chartjs-downsample/responsive_downsample_plugin.js +0 -295
  162. package/esm2015/src/nameserver-history-viewer/utils/chartjs-downsample/utils.js +0 -130
  163. package/esm2015/src/nameserver-history-viewer/utils/chartjs-zoom/chart.zoom.js +0 -733
  164. package/esm2015/src/nameserver-history-viewer/utils/chartjs-zoom/index.js +0 -6
  165. package/esm2015/src/nameserver-history-viewer/utils/file-util.js +0 -149
  166. package/esm2015/src/nameserver-history-viewer/utils/index.js +0 -9
  167. package/esm2015/src/nameserver-history-viewer/utils/time-util.js +0 -135
  168. package/esm2015/src/nameserver-history-viewer/utils/ui-util.js +0 -203
  169. package/esm5/ngx-hana-nameserver-history-viewer.js +0 -10
  170. package/esm5/public-api.js +0 -6
  171. package/esm5/src/nameserver-history-viewer/components/alert/alert.component.js +0 -140
  172. package/esm5/src/nameserver-history-viewer/components/alert/alert.module.js +0 -25
  173. package/esm5/src/nameserver-history-viewer/components/alert/index.js +0 -7
  174. package/esm5/src/nameserver-history-viewer/components/file-drop-input/file-drop-input.component.js +0 -155
  175. package/esm5/src/nameserver-history-viewer/components/file-drop-input/index.js +0 -6
  176. package/esm5/src/nameserver-history-viewer/components/index.js +0 -13
  177. package/esm5/src/nameserver-history-viewer/components/instruction/index.js +0 -6
  178. package/esm5/src/nameserver-history-viewer/components/instruction/instruction.component.js +0 -67
  179. package/esm5/src/nameserver-history-viewer/components/nameserver-history.component.js +0 -990
  180. package/esm5/src/nameserver-history-viewer/components/port-selector/index.js +0 -6
  181. package/esm5/src/nameserver-history-viewer/components/port-selector/port-selector.component.js +0 -93
  182. package/esm5/src/nameserver-history-viewer/components/port-selector/port-selector.service.js +0 -81
  183. package/esm5/src/nameserver-history-viewer/components/progress-bar/index.js +0 -6
  184. package/esm5/src/nameserver-history-viewer/components/progress-bar/progress-bar.component.js +0 -26
  185. package/esm5/src/nameserver-history-viewer/components/time-range-selector/index.js +0 -6
  186. package/esm5/src/nameserver-history-viewer/components/time-range-selector/time-range-selector.component.js +0 -58
  187. package/esm5/src/nameserver-history-viewer/components/timezone-selector/index.js +0 -6
  188. package/esm5/src/nameserver-history-viewer/components/timezone-selector/timezone-selector.component.js +0 -164
  189. package/esm5/src/nameserver-history-viewer/components/timezone-selector/timezone-selector.service.js +0 -102
  190. package/esm5/src/nameserver-history-viewer/index.js +0 -6
  191. package/esm5/src/nameserver-history-viewer/nameserver-history.module.js +0 -46
  192. package/esm5/src/nameserver-history-viewer/services/chart.service.js +0 -578
  193. package/esm5/src/nameserver-history-viewer/services/file.service.js +0 -566
  194. package/esm5/src/nameserver-history-viewer/services/index.js +0 -8
  195. package/esm5/src/nameserver-history-viewer/services/ui.service.js +0 -1036
  196. package/esm5/src/nameserver-history-viewer/types/abort.types.js +0 -13
  197. package/esm5/src/nameserver-history-viewer/types/alert.types.js +0 -13
  198. package/esm5/src/nameserver-history-viewer/types/chart-content-data-item.types.js +0 -15
  199. package/esm5/src/nameserver-history-viewer/types/chart-content-data.types.js +0 -9
  200. package/esm5/src/nameserver-history-viewer/types/chart-content-header.types.js +0 -15
  201. package/esm5/src/nameserver-history-viewer/types/chart-content-time.types.js +0 -9
  202. package/esm5/src/nameserver-history-viewer/types/chart-content.types.js +0 -21
  203. package/esm5/src/nameserver-history-viewer/types/color-rgba.types.js +0 -19
  204. package/esm5/src/nameserver-history-viewer/types/html-element.type.js +0 -19
  205. package/esm5/src/nameserver-history-viewer/types/index.js +0 -32
  206. package/esm5/src/nameserver-history-viewer/types/item.types.js +0 -19
  207. package/esm5/src/nameserver-history-viewer/types/legend-color.types.js +0 -9
  208. package/esm5/src/nameserver-history-viewer/types/load-history-info-backup.types.js +0 -19
  209. package/esm5/src/nameserver-history-viewer/types/load-history-info-columnstore.types.js +0 -19
  210. package/esm5/src/nameserver-history-viewer/types/load-history-info-host.types.js +0 -35
  211. package/esm5/src/nameserver-history-viewer/types/load-history-info-item.types.js +0 -31
  212. package/esm5/src/nameserver-history-viewer/types/load-history-info-persistence.types.js +0 -27
  213. package/esm5/src/nameserver-history-viewer/types/load-history-info-rowstore.types.js +0 -15
  214. package/esm5/src/nameserver-history-viewer/types/load-history-info-server.types.js +0 -25
  215. package/esm5/src/nameserver-history-viewer/types/load-history-info-session-admission-control.types.js +0 -19
  216. package/esm5/src/nameserver-history-viewer/types/load-history-info-sql.types.js +0 -37
  217. package/esm5/src/nameserver-history-viewer/types/load-history-info-sync-primitives.types.js +0 -15
  218. package/esm5/src/nameserver-history-viewer/types/load-history-info-threads.types.js +0 -23
  219. package/esm5/src/nameserver-history-viewer/types/load-history-info.types.js +0 -31
  220. package/esm5/src/nameserver-history-viewer/types/port.types.js +0 -17
  221. package/esm5/src/nameserver-history-viewer/types/scale-group.types.js +0 -35
  222. package/esm5/src/nameserver-history-viewer/types/unit-category.types.js +0 -21
  223. package/esm5/src/nameserver-history-viewer/types/unit.types.js +0 -19
  224. package/esm5/src/nameserver-history-viewer/utils/chart-util.js +0 -39
  225. package/esm5/src/nameserver-history-viewer/utils/chartjs-downsample/chartjs_ext.js +0 -100
  226. package/esm5/src/nameserver-history-viewer/utils/chartjs-downsample/data_culling.js +0 -88
  227. package/esm5/src/nameserver-history-viewer/utils/chartjs-downsample/data_mipmap.js +0 -307
  228. package/esm5/src/nameserver-history-viewer/utils/chartjs-downsample/index.js +0 -46
  229. package/esm5/src/nameserver-history-viewer/utils/chartjs-downsample/lttb_data_mipmap.js +0 -232
  230. package/esm5/src/nameserver-history-viewer/utils/chartjs-downsample/responsive_downsample_plugin.js +0 -350
  231. package/esm5/src/nameserver-history-viewer/utils/chartjs-downsample/utils.js +0 -142
  232. package/esm5/src/nameserver-history-viewer/utils/chartjs-zoom/chart.zoom.js +0 -733
  233. package/esm5/src/nameserver-history-viewer/utils/chartjs-zoom/index.js +0 -6
  234. package/esm5/src/nameserver-history-viewer/utils/file-util.js +0 -150
  235. package/esm5/src/nameserver-history-viewer/utils/index.js +0 -9
  236. package/esm5/src/nameserver-history-viewer/utils/time-util.js +0 -135
  237. package/esm5/src/nameserver-history-viewer/utils/ui-util.js +0 -205
  238. package/fesm2015/ngx-hana-nameserver-history-viewer.js +0 -5223
  239. package/fesm2015/ngx-hana-nameserver-history-viewer.js.map +0 -1
  240. package/fesm5/ngx-hana-nameserver-history-viewer.js +0 -6295
  241. package/fesm5/ngx-hana-nameserver-history-viewer.js.map +0 -1
  242. package/ngx-hana-nameserver-history-viewer.metadata.json +0 -1
@@ -1,1036 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
- */
5
- import * as tslib_1 from "tslib";
6
- import { Injectable } from '@angular/core';
7
- import { getIgnoredLineNumFromTail, isUnitTimeRelated, getValueByUnit, getRoundedValue, calculateYScale } from '../utils';
8
- import { ScaleGroup, Unit, UnitType, Item } from '../types';
9
- // Using dynamic flag to fix the issue of ng-packagr #696: Lambda not supported
10
- // @dynamic
11
- var UIService = /** @class */ (function () {
12
- function UIService() {
13
- this._DEFAULT_DISPLAY_ITEMS = ['cpuUsed', 'indexserverMemUsed', 'mvccNum'];
14
- this._HIDED_COLUMNS = [Item.yScaleGroup, Item.description];
15
- this._MEASURE_COLUMNS = [Item.max, Item.average, Item.sum, Item.last];
16
- this._loadHistoryInfos = {};
17
- }
18
- /**
19
- * get the colors for legends
20
- */
21
- /**
22
- * get the colors for legends
23
- * @param {?=} alpha
24
- * @return {?}
25
- */
26
- UIService.getColors = /**
27
- * get the colors for legends
28
- * @param {?=} alpha
29
- * @return {?}
30
- */
31
- function (alpha) {
32
- if (alpha === void 0) { alpha = null; }
33
- if (alpha == null) {
34
- alpha = 0.8;
35
- }
36
- return {
37
- cpuUsed: this._getRgbColor(199, 21, 133, alpha),
38
- // mediumvioletred
39
- memoryResident: this._getRgbColor(238, 130, 238, alpha),
40
- // violet
41
- memoryTotalResident: this._getRgbColor(72, 61, 139, alpha),
42
- // darkslateblue
43
- memoryUsed: this._getRgbColor(0, 0, 205, alpha),
44
- // mediumblue
45
- memoryLimit: this._getRgbColor(255, 105, 180, alpha),
46
- // hotpink
47
- memorySize: this._getRgbColor(70, 130, 180, alpha),
48
- // steelblue
49
- diskUsed: this._getRgbColor(25, 25, 112, alpha),
50
- // midnightblue
51
- diskSize: this._getRgbColor(0, 255, 255, alpha),
52
- // aqua
53
- networkIn: this._getRgbColor(102, 51, 153, alpha),
54
- // rebeccapurple
55
- networkOut: this._getRgbColor(245, 222, 179, alpha),
56
- // wheat
57
- swapIn: this._getRgbColor(47, 79, 79, alpha),
58
- // darkslategray
59
- swapOut: this._getRgbColor(205, 92, 92, alpha),
60
- // indianred
61
- indexserverCpu: this._getRgbColor(255, 99, 71, alpha),
62
- // tomato
63
- indexserverCpuSys: this._getRgbColor(255, 20, 147, alpha),
64
- // deeppink
65
- indexserverMemUsed: this._getRgbColor(0, 255, 0, alpha),
66
- // lime
67
- indexserverMemLimit: this._getRgbColor(139, 0, 0, alpha),
68
- // darkred
69
- indexserverHandles: this._getRgbColor(139, 0, 139, alpha),
70
- // darkmagenta
71
- indexserverPingtime: this._getRgbColor(189, 183, 107, alpha),
72
- // darkkhaki
73
- indexserverSwapIn: this._getRgbColor(112, 128, 144, alpha),
74
- // slategray
75
- sqlConnections: this._getRgbColor(85, 107, 47, alpha),
76
- // darkolivegreen
77
- internalConnections: this._getRgbColor(46, 139, 87, alpha),
78
- // seagreen
79
- externalConnections: this._getRgbColor(147, 112, 219, alpha),
80
- // mediumpurple
81
- idleConnections: this._getRgbColor(216, 191, 216, alpha),
82
- // thistle
83
- sqlTransactions: this._getRgbColor(220, 20, 60, alpha),
84
- // crimson
85
- internalTransactions: this._getRgbColor(186, 85, 211, alpha),
86
- // mediumorchid
87
- externalTransactions: this._getRgbColor(221, 160, 221, alpha),
88
- // plum
89
- userTransactions: this._getRgbColor(210, 105, 30, alpha),
90
- // chocolate
91
- sqlBlockedTrans: this._getRgbColor(0, 0, 255, alpha),
92
- // blue
93
- sqlStatements: this._getRgbColor(188, 143, 143, alpha),
94
- // rosybrown
95
- cidRange: this._getRgbColor(32, 178, 170, alpha),
96
- // lightseagreen
97
- tidRange: this._getRgbColor(124, 252, 0, alpha),
98
- // lawngreen
99
- pendingRequestCount: this._getRgbColor(160, 32, 240, alpha),
100
- // purple3
101
- mvccNum: this._getRgbColor(65, 105, 225, alpha),
102
- // royalblue
103
- acquiredRecordLocks: this._getRgbColor(0, 250, 154, alpha),
104
- // mediumspringgreen
105
- searchCount: this._getRgbColor(127, 255, 212, alpha),
106
- // aquamarine
107
- indexingCount: this._getRgbColor(0, 191, 255, alpha),
108
- // deepskyblue
109
- mergeCount: this._getRgbColor(135, 206, 235, alpha),
110
- // skyblue
111
- unloadCount: this._getRgbColor(255, 165, 0, alpha),
112
- // orange
113
- indexserverThreads: this._getRgbColor(0, 100, 0, alpha),
114
- // darkgreen
115
- waitingThreads: this._getRgbColor(176, 48, 96, alpha),
116
- // maroon3
117
- totalThreads: this._getRgbColor(100, 149, 237, alpha),
118
- // cornflower
119
- activeSqlExecutors: this._getRgbColor(175, 238, 238, alpha),
120
- // paleturquoise
121
- waitingSqlExecutors: this._getRgbColor(50, 205, 50, alpha),
122
- // limegreen
123
- totalSqlExecutors: this._getRgbColor(240, 230, 140, alpha),
124
- // khaki
125
- dataWriteSize: this._getRgbColor(102, 205, 170, alpha),
126
- // mediumaquamarine
127
- dataWriteTime: this._getRgbColor(169, 169, 169, alpha),
128
- // darkgray
129
- logWriteSize: this._getRgbColor(160, 82, 45, alpha),
130
- // sienna
131
- logWriteTime: this._getRgbColor(128, 128, 0, alpha),
132
- // olive
133
- dataReadSize: this._getRgbColor(255, 215, 0, alpha),
134
- // gold
135
- dataReadTime: this._getRgbColor(95, 158, 160, alpha),
136
- // cadetblue
137
- logReadSize: this._getRgbColor(255, 0, 0, alpha),
138
- // red
139
- logReadTime: this._getRgbColor(184, 134, 11, alpha),
140
- // darkgoldenrod
141
- dataBackupWriteSize: this._getRgbColor(255, 255, 0, alpha),
142
- // yellow
143
- dataBackupWriteTime: this._getRgbColor(154, 205, 50, alpha),
144
- // yellowgreen
145
- logBackupWriteSize: this._getRgbColor(0, 0, 139, alpha),
146
- // darkblue
147
- logBackupWriteTime: this._getRgbColor(219, 112, 147, alpha),
148
- // palevioletred
149
- mutexCollisionCount: this._getRgbColor(244, 164, 96, alpha),
150
- // sandybrown
151
- readWriteLockCollisionCount: this._getRgbColor(233, 150, 122, alpha),
152
- // darksalmon
153
- admissinControlAdmitCount: this._getRgbColor(143, 188, 143, alpha),
154
- // darkseagreen
155
- admissionControlRejectCount: this._getRgbColor(255, 0, 255, alpha),
156
- // fuchsia
157
- admissionControlWaitingRequests: this._getRgbColor(153, 50, 204, alpha),
158
- // darkorchid
159
- admissionControlWaitTime: this._getRgbColor(144, 238, 144, alpha),
160
- };
161
- };
162
- Object.defineProperty(UIService, "_unitType", {
163
- get: /**
164
- * @private
165
- * @return {?}
166
- */
167
- function () {
168
- /** @type {?} */
169
- var unitType = {};
170
- unitType[Unit.PCT] = UnitType.TypeEA;
171
- unitType[Unit.MS] = UnitType.TypeEA;
172
- unitType[Unit.Empty] = UnitType.TypeEA;
173
- unitType[Unit.GB] = UnitType.TypeGB;
174
- unitType[Unit.MB] = UnitType.TypeMB;
175
- unitType[Unit.MBPerSec] = UnitType.TypeMBSec;
176
- unitType[Unit.SecPerSec] = UnitType.TypeSecSec;
177
- unitType[Unit.StmtPerSec] = UnitType.TypeSec;
178
- unitType[Unit.ReqPerSec] = UnitType.TypeSec;
179
- unitType[Unit.ColPerSec] = UnitType.TypeSec;
180
- return unitType;
181
- },
182
- enumerable: true,
183
- configurable: true
184
- });
185
- Object.defineProperty(UIService, "_YScaleGroupList", {
186
- /**
187
- * get yScale group list from the enum ScaleGroup
188
- */
189
- get: /**
190
- * get yScale group list from the enum ScaleGroup
191
- * @private
192
- * @return {?}
193
- */
194
- function () {
195
- return Object.keys(ScaleGroup).filter(function (key) { return !isNaN(Number(ScaleGroup[key])); }).map(function (key) { return ScaleGroup[key]; });
196
- },
197
- enumerable: true,
198
- configurable: true
199
- });
200
- /**
201
- * Generate one item by the provided attributes and values
202
- * @param args the dynamic parameter of [attribute, value]
203
- */
204
- /**
205
- * Generate one item by the provided attributes and values
206
- * @private
207
- * @param {...?} args the dynamic parameter of [attribute, value]
208
- * @return {?}
209
- */
210
- UIService._generateLoadHistoryInfoItem = /**
211
- * Generate one item by the provided attributes and values
212
- * @private
213
- * @param {...?} args the dynamic parameter of [attribute, value]
214
- * @return {?}
215
- */
216
- function () {
217
- var args = [];
218
- for (var _i = 0; _i < arguments.length; _i++) {
219
- args[_i] = arguments[_i];
220
- }
221
- /** @type {?} */
222
- var obj = {};
223
- if (!args || args.length <= 0) {
224
- return obj;
225
- }
226
- args.forEach(function (item) {
227
- if (item && item.length >= 2) {
228
- obj[item[0]] = item[1];
229
- }
230
- });
231
- return obj;
232
- };
233
- /**
234
- * generate the loadHistoryInfo object with default values.
235
- */
236
- /**
237
- * generate the loadHistoryInfo object with default values.
238
- * @private
239
- * @return {?}
240
- */
241
- UIService._generateLoadHistoryInfo = /**
242
- * generate the loadHistoryInfo object with default values.
243
- * @private
244
- * @return {?}
245
- */
246
- function () {
247
- // minimum value for YScale of swapIn, swapOut, indexserverSwapIn is 100 (according to hana studio)
248
- /** @type {?} */
249
- var infoItem = UIService._generateLoadHistoryInfoItem;
250
- // just for making the name shorter...
251
- /** @type {?} */
252
- var cpuUsed = infoItem([Item.kpi, 'CPU'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.CPU], [Item.unit, Unit.PCT], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'CPU Used by all processes']);
253
- /** @type {?} */
254
- var memoryResident = infoItem([Item.kpi, 'Database Resident Memory'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Memory], [Item.unit, Unit.MB], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Physical memory used for all HANA processes']);
255
- /** @type {?} */
256
- var memoryTotalResident = infoItem([Item.kpi, 'Total Resident Memory'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Memory], [Item.unit, Unit.MB], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Physical memory used for all processes']);
257
- /** @type {?} */
258
- var memoryUsed = infoItem([Item.kpi, 'Database Used Memory'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Memory], [Item.unit, Unit.MB], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Memory used for all HANA processes']);
259
- /** @type {?} */
260
- var memoryLimit = infoItem([Item.kpi, 'Database Allocation Limit'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Memory], [Item.unit, Unit.MB], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Memory allocation limit for all processes of HANA instance']);
261
- /** @type {?} */
262
- var memorySize = infoItem([Item.kpi, 'Physical Memory Size'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Memory], [Item.unit, Unit.MB], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Physical memory size']);
263
- /** @type {?} */
264
- var diskUsed = infoItem([Item.kpi, 'Disk Used'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Disk], [Item.unit, Unit.GB], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Disk used']);
265
- /** @type {?} */
266
- var diskSize = infoItem([Item.kpi, 'Disk Size'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Disk], [Item.unit, Unit.GB], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Disk size']);
267
- /** @type {?} */
268
- var networkIn = infoItem([Item.kpi, 'Network In'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Network], [Item.unit, Unit.MBPerSec], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes read from network by all processes']);
269
- /** @type {?} */
270
- var networkOut = infoItem([Item.kpi, 'Network Out'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Network], [Item.unit, Unit.MBPerSec], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes written to network by all processes']);
271
- /** @type {?} */
272
- var swapIn = infoItem([Item.kpi, 'Swap In'], [Item.yScale, 100], [Item.yScaleGroup, ScaleGroup.Swap], [Item.unit, Unit.MBPerSec], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes read from swap by all processes (pswpin line in /proc/vmstat * sysconf(_SC_PAGESIZE))']);
273
- /** @type {?} */
274
- var swapOut = infoItem([Item.kpi, 'Swap Out'], [Item.yScale, 100], [Item.yScaleGroup, ScaleGroup.Swap], [Item.unit, Unit.MBPerSec], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes written To swap by all processes (pswpout line in /proc/vmstat * sysconf(_SC_PAGESIZE))']);
275
- /** @type {?} */
276
- var indexserverCpu = infoItem([Item.kpi, 'Index Server CPU'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.CPU], [Item.unit, Unit.PCT], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'CPU used by Service']);
277
- /** @type {?} */
278
- var indexserverCpuSys = infoItem([Item.kpi, 'System CPU'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.CPU], [Item.unit, Unit.PCT], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'OS Kernel/System CPU used by Service']);
279
- /** @type {?} */
280
- var indexserverMemUsed = infoItem([Item.kpi, 'Memory Used'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Memory], [Item.unit, Unit.MB], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Memory used by Service']);
281
- /** @type {?} */
282
- var indexserverMemLimit = infoItem([Item.kpi, 'Memory Allocation Limit'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Memory], [Item.unit, Unit.MB], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Memory allocation limit for Service']);
283
- /** @type {?} */
284
- var indexserverHandles = infoItem([Item.kpi, 'Handles'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of open handles']);
285
- /** @type {?} */
286
- var indexserverPingtime = infoItem([Item.kpi, 'Ping Time'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.MS], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Duration of Service ping request (THREAD_METHOD=\'__nsWatchdog\'). This request includes the collection of service specific KPI\'s']);
287
- /** @type {?} */
288
- var indexserverSwapIn = infoItem([Item.kpi, 'Index Server Swap In'], [Item.yScale, 100], [Item.yScaleGroup, ScaleGroup.Swap], [Item.unit, Unit.MBPerSec], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes read from swap by Service (column 12(majflt) in /proc/<pid>/stat * sysconf(_SC_PAGESIZE))']);
289
- /** @type {?} */
290
- var sqlConnections = infoItem([Item.kpi, 'Open Connections'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Conn], [Item.unit, Unit.Empty], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of open SQL connections']);
291
- /** @type {?} */
292
- var internalConnections = infoItem([Item.kpi, 'Internal Connections'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Conn], [Item.unit, Unit.Empty], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of open SQL internal connections']);
293
- /** @type {?} */
294
- var externalConnections = infoItem([Item.kpi, 'External Connections'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Conn], [Item.unit, Unit.Empty], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of open SQL external connections']);
295
- /** @type {?} */
296
- var idleConnections = infoItem([Item.kpi, 'Idle Connections'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Conn], [Item.unit, Unit.Empty], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of open SQL idle connections']);
297
- /** @type {?} */
298
- var sqlTransactions = infoItem([Item.kpi, 'Open Transactions'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Trans], [Item.unit, Unit.Empty], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of open SQL transactions']);
299
- /** @type {?} */
300
- var internalTransactions = infoItem([Item.kpi, 'Internal Transactions'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Trans], [Item.unit, Unit.Empty], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of internal transactions']);
301
- /** @type {?} */
302
- var externalTransactions = infoItem([Item.kpi, 'External Transactions'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Trans], [Item.unit, Unit.Empty], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of external transactions']);
303
- /** @type {?} */
304
- var userTransactions = infoItem([Item.kpi, 'User Transactions'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Trans], [Item.unit, Unit.Empty], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of user transactions']);
305
- /** @type {?} */
306
- var sqlBlockedTrans = infoItem([Item.kpi, 'Blocked Transactions'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of blocked SQL transactions']);
307
- /** @type {?} */
308
- var sqlStatements = infoItem([Item.kpi, 'Statements'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Stmt], [Item.unit, Unit.StmtPerSec], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of finished SQL statements']);
309
- /** @type {?} */
310
- var cidRange = infoItem([Item.kpi, 'Active Commit ID Range'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Range between newest and oldest active commit ID']);
311
- /** @type {?} */
312
- var tidRange = infoItem([Item.kpi, 'Active Transaction ID Range'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Range between newest and oldest active transaction ID']);
313
- /** @type {?} */
314
- var pendingRequestCount = infoItem([Item.kpi, 'Pending Request Count'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of pending session requests']);
315
- /** @type {?} */
316
- var mvccNum = infoItem([Item.kpi, 'Active Versions'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of active MVCC versions']);
317
- /** @type {?} */
318
- var acquiredRecordLocks = infoItem([Item.kpi, 'Acquired Record Locks'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of acquired record locks']);
319
- /** @type {?} */
320
- var searchCount = infoItem([Item.kpi, 'Read Requests'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Req], [Item.unit, Unit.ReqPerSec], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of read requests (select)']);
321
- /** @type {?} */
322
- var indexingCount = infoItem([Item.kpi, 'Write Requests'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Req], [Item.unit, Unit.ReqPerSec], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of write requests (insert,update,delete)']);
323
- /** @type {?} */
324
- var mergeCount = infoItem([Item.kpi, 'Merge Requests'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Req], [Item.unit, Unit.ReqPerSec], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of merge requests']);
325
- /** @type {?} */
326
- var unloadCount = infoItem([Item.kpi, 'Column Unloads'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Req], [Item.unit, Unit.ReqPerSec], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of column unloads']);
327
- /** @type {?} */
328
- var indexserverThreads = infoItem([Item.kpi, 'Active Threads'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of active threads']);
329
- /** @type {?} */
330
- var waitingThreads = infoItem([Item.kpi, 'Waiting Threads'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of waiting threads']);
331
- /** @type {?} */
332
- var totalThreads = infoItem([Item.kpi, 'Total Threads'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Total number of threads']);
333
- /** @type {?} */
334
- var activeSqlExecutors = infoItem([Item.kpi, 'Active SqlExecutors'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of active SqlExecutors']);
335
- /** @type {?} */
336
- var waitingSqlExecutors = infoItem([Item.kpi, 'Waiting SqlExecutors'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of waiting SqlExecutors']);
337
- /** @type {?} */
338
- var totalSqlExecutors = infoItem([Item.kpi, 'Total SqlExecutors'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Total number of SqlExecutors']);
339
- /** @type {?} */
340
- var dataWriteSize = infoItem([Item.kpi, 'Data Write Size'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.WRSize], [Item.unit, Unit.MBPerSec], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes written to data area']);
341
- /** @type {?} */
342
- var dataWriteTime = infoItem([Item.kpi, 'Data Write Time'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.WRTime], [Item.unit, Unit.SecPerSec], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Time used for writing to data area']);
343
- /** @type {?} */
344
- var logWriteSize = infoItem([Item.kpi, 'Log Write Size'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.WRSize], [Item.unit, Unit.MBPerSec], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes written to log area']);
345
- /** @type {?} */
346
- var logWriteTime = infoItem([Item.kpi, 'Log Write Time'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.WRTime], [Item.unit, Unit.SecPerSec], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Time used for writing to log area']);
347
- /** @type {?} */
348
- var dataReadSize = infoItem([Item.kpi, 'Data Read Size'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.WRSize], [Item.unit, Unit.MBPerSec], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes read from data area']);
349
- /** @type {?} */
350
- var dataReadTime = infoItem([Item.kpi, 'Data Read Time'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.WRTime], [Item.unit, Unit.SecPerSec], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Time used for reading from data area']);
351
- /** @type {?} */
352
- var logReadSize = infoItem([Item.kpi, 'Log Read Size'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.WRSize], [Item.unit, Unit.MBPerSec], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes read from log area']);
353
- /** @type {?} */
354
- var logReadTime = infoItem([Item.kpi, 'Log Read Time'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.WRTime], [Item.unit, Unit.SecPerSec], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Time used for reading from log area']);
355
- /** @type {?} */
356
- var dataBackupWriteSize = infoItem([Item.kpi, 'Data Backup Write Size'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.WRSize], [Item.unit, Unit.MBPerSec], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes written to data backup']);
357
- /** @type {?} */
358
- var dataBackupWriteTime = infoItem([Item.kpi, 'Data Backup Write Time'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.WRTime], [Item.unit, Unit.SecPerSec], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Time used for writing to data backup']);
359
- /** @type {?} */
360
- var logBackupWriteSize = infoItem([Item.kpi, 'Log Backup Write Size'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.WRSize], [Item.unit, Unit.MBPerSec], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes written to log backup']);
361
- /** @type {?} */
362
- var logBackupWriteTime = infoItem([Item.kpi, 'Log Backup Write Time'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.WRTime], [Item.unit, Unit.SecPerSec], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Time used for writing to log backup']);
363
- /** @type {?} */
364
- var mutexCollisionCount = infoItem([Item.kpi, 'Mutex Collisions'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.ColPerSec], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of collisions on mutexes']);
365
- /** @type {?} */
366
- var readWriteLockCollisionCount = infoItem([Item.kpi, 'Read/Write Lock Collisions'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.ColPerSec], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of collisions on read/write locks']);
367
- /** @type {?} */
368
- var admissinControlAdmitCount = infoItem([Item.kpi, 'Admitted Requests'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.ReqPerSec], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of session requests admitted by admission control']);
369
- /** @type {?} */
370
- var admissionControlRejectCount = infoItem([Item.kpi, 'Rejected Requests'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.ReqPerSec], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of session requests rejected by admission control']);
371
- /** @type {?} */
372
- var admissionControlWaitingRequests = infoItem([Item.kpi, 'Waiting Requests'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.ReqPerSec], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of session requests waiting in admission control queue']);
373
- /** @type {?} */
374
- var admissionControlWaitTime = infoItem([Item.kpi, 'Wait Time'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.SecPerSec], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Total wait time of session requests queued in admission control queue']);
375
- // generate Host
376
- /** @type {?} */
377
- var loadHistoryInfoHost = {
378
- cpuUsed: cpuUsed,
379
- memoryResident: memoryResident,
380
- memoryTotalResident: memoryTotalResident,
381
- memoryUsed: memoryUsed,
382
- memoryLimit: memoryLimit,
383
- memorySize: memorySize,
384
- diskUsed: diskUsed,
385
- diskSize: diskSize,
386
- networkIn: networkIn,
387
- networkOut: networkOut,
388
- swapIn: swapIn,
389
- swapOut: swapOut,
390
- };
391
- // generate Index Server
392
- /** @type {?} */
393
- var loadHistoryInfoIndexServer = {
394
- indexserverCpu: indexserverCpu,
395
- indexserverCpuSys: indexserverCpuSys,
396
- indexserverMemUsed: indexserverMemUsed,
397
- indexserverMemLimit: indexserverMemLimit,
398
- indexserverHandles: indexserverHandles,
399
- indexserverPingtime: indexserverPingtime,
400
- indexserverSwapIn: indexserverSwapIn,
401
- };
402
- // generate SQL
403
- /** @type {?} */
404
- var loadHistoryInfoSQL = {
405
- sqlConnections: sqlConnections,
406
- internalConnections: internalConnections,
407
- externalConnections: externalConnections,
408
- idleConnections: idleConnections,
409
- sqlTransactions: sqlTransactions,
410
- internalTransactions: internalTransactions,
411
- externalTransactions: externalTransactions,
412
- userTransactions: userTransactions,
413
- sqlBlockedTrans: sqlBlockedTrans,
414
- sqlStatements: sqlStatements,
415
- cidRange: cidRange,
416
- tidRange: tidRange,
417
- pendingRequestCount: pendingRequestCount,
418
- };
419
- // generate Row Store
420
- /** @type {?} */
421
- var loadHistoryInfoRowStore = {
422
- mvccNum: mvccNum,
423
- acquiredRecordLocks: acquiredRecordLocks,
424
- };
425
- // generate Column Store
426
- /** @type {?} */
427
- var loadHistoryInfoColumnStore = {
428
- searchCount: searchCount,
429
- indexingCount: indexingCount,
430
- mergeCount: mergeCount,
431
- unloadCount: unloadCount,
432
- };
433
- // generate Threads
434
- /** @type {?} */
435
- var loadHistoryInfoThreads = {
436
- indexserverThreads: indexserverThreads,
437
- waitingThreads: waitingThreads,
438
- totalThreads: totalThreads,
439
- activeSqlExecutors: activeSqlExecutors,
440
- waitingSqlExecutors: waitingSqlExecutors,
441
- totalSqlExecutors: totalSqlExecutors,
442
- };
443
- // generate Persistence
444
- /** @type {?} */
445
- var loadHistoryInfoPersistence = {
446
- dataWriteSize: dataWriteSize,
447
- dataWriteTime: dataWriteTime,
448
- logWriteSize: logWriteSize,
449
- logWriteTime: logWriteTime,
450
- dataReadSize: dataReadSize,
451
- dataReadTime: dataReadTime,
452
- logReadSize: logReadSize,
453
- logReadTime: logReadTime,
454
- };
455
- // generate Backup
456
- /** @type {?} */
457
- var loadHistoryInfoBackup = {
458
- dataBackupWriteSize: dataBackupWriteSize,
459
- dataBackupWriteTime: dataBackupWriteTime,
460
- logBackupWriteSize: logBackupWriteSize,
461
- logBackupWriteTime: logBackupWriteTime,
462
- };
463
- // generate Synchronization Primitives
464
- /** @type {?} */
465
- var loadHistoryInfoSynchronizationPrimitives = {
466
- mutexCollisionCount: mutexCollisionCount,
467
- readWriteLockCollisionCount: readWriteLockCollisionCount,
468
- };
469
- // Session Admission Control
470
- /** @type {?} */
471
- var loadHistoryInfoSessionAdmissionControl = {
472
- admissinControlAdmitCount: admissinControlAdmitCount,
473
- admissionControlRejectCount: admissionControlRejectCount,
474
- admissionControlWaitingRequests: admissionControlWaitingRequests,
475
- admissionControlWaitTime: admissionControlWaitTime,
476
- };
477
- return {
478
- 'Host': loadHistoryInfoHost,
479
- 'Index Server': loadHistoryInfoIndexServer,
480
- 'SQL': loadHistoryInfoSQL,
481
- 'Row Store': loadHistoryInfoRowStore,
482
- 'Column Store': loadHistoryInfoColumnStore,
483
- 'Threads': loadHistoryInfoThreads,
484
- 'Persistence': loadHistoryInfoPersistence,
485
- 'Backup': loadHistoryInfoBackup,
486
- 'Synchronization Primitives': loadHistoryInfoSynchronizationPrimitives,
487
- 'Session Admission Control': loadHistoryInfoSessionAdmissionControl
488
- };
489
- };
490
- /**
491
- * get rgbcolor object via red, green, blue and alpha.
492
- */
493
- /**
494
- * get rgbcolor object via red, green, blue and alpha.
495
- * @private
496
- * @param {?} red
497
- * @param {?} green
498
- * @param {?} blue
499
- * @param {?} alpha
500
- * @return {?}
501
- */
502
- UIService._getRgbColor = /**
503
- * get rgbcolor object via red, green, blue and alpha.
504
- * @private
505
- * @param {?} red
506
- * @param {?} green
507
- * @param {?} blue
508
- * @param {?} alpha
509
- * @return {?}
510
- */
511
- function (red, green, blue, alpha) {
512
- return { red: red, green: green, blue: blue, alpha: alpha };
513
- };
514
- /**
515
- * @private
516
- * @param {?} item
517
- * @param {?} yScale
518
- * @return {?}
519
- */
520
- UIService._getYScaleForItem = /**
521
- * @private
522
- * @param {?} item
523
- * @param {?} yScale
524
- * @return {?}
525
- */
526
- function (item, yScale) {
527
- return yScale > item[Item.yScale] ? (item[Item.unit] === Unit.PCT ? 100 : yScale) : item[Item.yScale];
528
- };
529
- /**
530
- * @private
531
- * @param {?} groupItems
532
- * @return {?}
533
- */
534
- UIService._getMaxValueOfGroup = /**
535
- * @private
536
- * @param {?} groupItems
537
- * @return {?}
538
- */
539
- function (groupItems) {
540
- /** @type {?} */
541
- var max = 0;
542
- if (groupItems) {
543
- max = groupItems.reduce(function (maxValue, current) {
544
- return current.Max > maxValue ? current.Max : maxValue;
545
- }, 0);
546
- }
547
- return max;
548
- };
549
- /**
550
- * @private
551
- * @param {?} port
552
- * @return {?}
553
- */
554
- UIService.prototype._getLoadHistoryInfo = /**
555
- * @private
556
- * @param {?} port
557
- * @return {?}
558
- */
559
- function (port) {
560
- if (!this._loadHistoryInfos[port]) {
561
- this._loadHistoryInfos[port] = UIService._generateLoadHistoryInfo();
562
- }
563
- return this._loadHistoryInfos[port];
564
- };
565
- /**
566
- * @private
567
- * @param {?} itemKey
568
- * @param {?} port
569
- * @return {?}
570
- */
571
- UIService.prototype._getProcessingUnit = /**
572
- * @private
573
- * @param {?} itemKey
574
- * @param {?} port
575
- * @return {?}
576
- */
577
- function (itemKey, port) {
578
- /** @type {?} */
579
- var historyDetailItem = this._getItemByKey(itemKey, port);
580
- if (historyDetailItem) {
581
- /** @type {?} */
582
- var unit = historyDetailItem.Unit;
583
- if (!unit) {
584
- unit = '';
585
- }
586
- return UIService._unitType[unit];
587
- }
588
- };
589
- /**
590
- * @private
591
- * @param {?} key
592
- * @param {?} overview
593
- * @param {?} unit
594
- * @param {?} port
595
- * @return {?}
596
- */
597
- UIService.prototype._setOverview = /**
598
- * @private
599
- * @param {?} key
600
- * @param {?} overview
601
- * @param {?} unit
602
- * @param {?} port
603
- * @return {?}
604
- */
605
- function (key, overview, unit, port) {
606
- /** @type {?} */
607
- var historyDetailItem = this._getItemByKey(key, port);
608
- if (historyDetailItem) {
609
- historyDetailItem.Max = overview.Max >= 0 ? overview.Max : 0;
610
- historyDetailItem.Average = overview.Average >= 0 ? overview.Average : 0;
611
- // only TYPE_CONVERSION_MBSEC and TYPE_CONVERTION_SEC (eg: MB/s, req/s stmt/s...) need sum
612
- historyDetailItem.Sum = isUnitTimeRelated(unit) ? (overview.Sum >= 0 ? overview.Sum : 0) : '-';
613
- historyDetailItem.Last = overview.Last >= 0 ? overview.Last : 0;
614
- }
615
- };
616
- /**
617
- * convert unit values (eg: byte to MB or GB) and generate the control data (sum, max, avg) for one row
618
- */
619
- /**
620
- * convert unit values (eg: byte to MB or GB) and generate the control data (sum, max, avg) for one row
621
- * @private
622
- * @param {?} row
623
- * @param {?} key
624
- * @param {?} unit
625
- * @param {?} port
626
- * @return {?}
627
- */
628
- UIService.prototype._convertUnitAndGenerateRowControlData = /**
629
- * convert unit values (eg: byte to MB or GB) and generate the control data (sum, max, avg) for one row
630
- * @private
631
- * @param {?} row
632
- * @param {?} key
633
- * @param {?} unit
634
- * @param {?} port
635
- * @return {?}
636
- */
637
- function (row, key, unit, port) {
638
- var _this = this;
639
- return new Promise(function (resolve) {
640
- if (row) {
641
- /** @type {?} */
642
- var overview_1 = { Sum: 0, Max: 0, Average: 0, Last: 0 };
643
- /** @type {?} */
644
- var ignoredTailLineNum_1 = getIgnoredLineNumFromTail();
645
- /** @type {?} */
646
- var invalidCount_1 = 0;
647
- // convert unit and calculate the overview data, skip the first, and last three rows.
648
- row.forEach(function (item, index, arrayData) {
649
- // skip ignored line(s) from tail
650
- if (index <= row.length - ignoredTailLineNum_1 - 1) {
651
- if (arrayData[index].y >= 0) {
652
- arrayData[index].y = getValueByUnit(item.y, unit);
653
- overview_1.Sum += arrayData[index].y;
654
- if (isUnitTimeRelated(unit)) {
655
- if (index === 0) {
656
- // according to hana studio, for those time related column, the first value is set to 0
657
- arrayData[index].y = 0;
658
- }
659
- else {
660
- // get value for unit like: MB/s (value / seconds)
661
- /** @type {?} */
662
- var timeDiff = arrayData[index].x - arrayData[index - 1].x;
663
- arrayData[index].y = timeDiff !== 0 ? arrayData[index].y * 1000 / timeDiff : 0;
664
- }
665
- }
666
- arrayData[index].y = getRoundedValue(arrayData[index].y);
667
- if (arrayData[index].y > overview_1.Max) {
668
- overview_1.Max = arrayData[index].y;
669
- }
670
- }
671
- else {
672
- // set value to 0, for those points with value -1 or < 0
673
- arrayData[index].y = 0;
674
- // invalid count + 1, for calculating the average (not time relative)
675
- invalidCount_1++;
676
- }
677
- }
678
- });
679
- if (row.length > (ignoredTailLineNum_1 + invalidCount_1)) {
680
- if (isUnitTimeRelated(unit)) {
681
- /** @type {?} */
682
- var timePeriod = row[row.length - ignoredTailLineNum_1 - 1].x - row[0].x;
683
- overview_1.Average = timePeriod !== 0 ? getRoundedValue(overview_1.Sum * 1000 / timePeriod) : 0;
684
- }
685
- else {
686
- overview_1.Average = getRoundedValue(overview_1.Sum / (row.length - ignoredTailLineNum_1 - invalidCount_1));
687
- }
688
- overview_1.Last = row[row.length - ignoredTailLineNum_1 - 1].y;
689
- overview_1.Sum = getRoundedValue(overview_1.Sum);
690
- overview_1.Max = getRoundedValue(overview_1.Max);
691
- // remove those ignored lines
692
- row.length = row.length - ignoredTailLineNum_1;
693
- // for (let i = 0; i < IGNORE_RECORD_NUM_HEAD; i++) {
694
- // row.shift();
695
- // }
696
- }
697
- _this._setOverview(key, overview_1, unit, port);
698
- }
699
- resolve();
700
- });
701
- };
702
- /**
703
- * Loop from all history items, put those history items which
704
- * have the same yScaleGroup together, using yScaleGroup as key.
705
- * eg: {__SCALE_GROUP_CPU:[item1, item2...], __SCALE_GROUP_UNKNOWN:[item3, item4...]}
706
- */
707
- /**
708
- * Loop from all history items, put those history items which
709
- * have the same yScaleGroup together, using yScaleGroup as key.
710
- * eg: {__SCALE_GROUP_CPU:[item1, item2...], __SCALE_GROUP_UNKNOWN:[item3, item4...]}
711
- * @private
712
- * @param {?} port
713
- * @return {?}
714
- */
715
- UIService.prototype._getYScaleGroupWithHistoryItems = /**
716
- * Loop from all history items, put those history items which
717
- * have the same yScaleGroup together, using yScaleGroup as key.
718
- * eg: {__SCALE_GROUP_CPU:[item1, item2...], __SCALE_GROUP_UNKNOWN:[item3, item4...]}
719
- * @private
720
- * @param {?} port
721
- * @return {?}
722
- */
723
- function (port) {
724
- /** @type {?} */
725
- var yScaleGroup = {};
726
- /** @type {?} */
727
- var loadHistoryInfo = this._getLoadHistoryInfo(port);
728
- Object.keys(loadHistoryInfo).forEach(function (parentKey) {
729
- Object.keys(loadHistoryInfo[parentKey]).forEach(function (childKey) {
730
- /** @type {?} */
731
- var detailItem = loadHistoryInfo[parentKey][childKey];
732
- /** @type {?} */
733
- var yScaleGroupKey = detailItem._YScaleGroup;
734
- if (!yScaleGroup[yScaleGroupKey]) {
735
- yScaleGroup[yScaleGroupKey] = [];
736
- }
737
- yScaleGroup[yScaleGroupKey].push(detailItem);
738
- });
739
- });
740
- return yScaleGroup;
741
- };
742
- /**
743
- * @private
744
- * @param {?} groupItems
745
- * @param {?} group
746
- * @return {?}
747
- */
748
- UIService.prototype._setYScaleOfGroup = /**
749
- * @private
750
- * @param {?} groupItems
751
- * @param {?} group
752
- * @return {?}
753
- */
754
- function (groupItems, group) {
755
- if (groupItems) {
756
- if (group === ScaleGroup.Unknown) {
757
- groupItems.forEach(function (item) { return item[Item.yScale] = UIService._getYScaleForItem(item, calculateYScale(item.Max)); });
758
- }
759
- else {
760
- /** @type {?} */
761
- var yScale_1 = calculateYScale(UIService._getMaxValueOfGroup(groupItems));
762
- groupItems.forEach(function (item) { return item[Item.yScale] = UIService._getYScaleForItem(item, yScale_1); });
763
- }
764
- }
765
- };
766
- /**
767
- * @private
768
- * @param {?} key
769
- * @param {?} port
770
- * @return {?}
771
- */
772
- UIService.prototype._getItemByKey = /**
773
- * @private
774
- * @param {?} key
775
- * @param {?} port
776
- * @return {?}
777
- */
778
- function (key, port) {
779
- var e_1, _a;
780
- /** @type {?} */
781
- var loadHistoryInfo = this._getLoadHistoryInfo(port);
782
- try {
783
- for (var _b = tslib_1.__values(Object.keys(loadHistoryInfo)), _c = _b.next(); !_c.done; _c = _b.next()) {
784
- var itemKey = _c.value;
785
- if (key in loadHistoryInfo[itemKey]) {
786
- return loadHistoryInfo[itemKey][key];
787
- }
788
- }
789
- }
790
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
791
- finally {
792
- try {
793
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
794
- }
795
- finally { if (e_1) throw e_1.error; }
796
- }
797
- };
798
- /**
799
- * reset the load history info object, to prevent memory leak
800
- */
801
- /**
802
- * reset the load history info object, to prevent memory leak
803
- * @return {?}
804
- */
805
- UIService.prototype.clearLoadHistoryInfos = /**
806
- * reset the load history info object, to prevent memory leak
807
- * @return {?}
808
- */
809
- function () {
810
- this._loadHistoryInfos = {};
811
- };
812
- /**
813
- * get all the data for the selection table
814
- */
815
- /**
816
- * get all the data for the selection table
817
- * @param {?} headerKeys
818
- * @param {?} port
819
- * @param {?} defaultDisplayItems
820
- * @return {?}
821
- */
822
- UIService.prototype.getSelectionTableRows = /**
823
- * get all the data for the selection table
824
- * @param {?} headerKeys
825
- * @param {?} port
826
- * @param {?} defaultDisplayItems
827
- * @return {?}
828
- */
829
- function (headerKeys, port, defaultDisplayItems) {
830
- /** @type {?} */
831
- var rows = [];
832
- /** @type {?} */
833
- var loadHistoryInfo = this._getLoadHistoryInfo(port);
834
- /** @type {?} */
835
- var defaultItems = defaultDisplayItems && defaultDisplayItems.length > 0 ? defaultDisplayItems : this._DEFAULT_DISPLAY_ITEMS;
836
- Object.keys(loadHistoryInfo).forEach(function (keyParent) {
837
- rows.push({ KPI: keyParent, header: true });
838
- /** @type {?} */
839
- var len = rows.length;
840
- rows.push.apply(rows, tslib_1.__spread(Object.keys(loadHistoryInfo[keyParent])
841
- .filter(function (keyChild) { return headerKeys.includes(keyChild); })
842
- .map(function (keyChild) {
843
- loadHistoryInfo[keyParent][keyChild].header = false;
844
- loadHistoryInfo[keyParent][keyChild].checked = defaultItems.includes(keyChild);
845
- return loadHistoryInfo[keyParent][keyChild];
846
- })));
847
- if (len === rows.length) {
848
- // no sub items, remove the header
849
- rows.pop();
850
- }
851
- });
852
- return rows;
853
- };
854
- /**
855
- * get all hidden columns. Those hidden columns = input hidden columns + default hidden columns
856
- * @param hideMeasureColumns the array contains the columns list that need to be hidden.
857
- */
858
- /**
859
- * get all hidden columns. Those hidden columns = input hidden columns + default hidden columns
860
- * @param {?} hideMeasureColumns the array contains the columns list that need to be hidden.
861
- * @return {?}
862
- */
863
- UIService.prototype.getHiddenColumns = /**
864
- * get all hidden columns. Those hidden columns = input hidden columns + default hidden columns
865
- * @param {?} hideMeasureColumns the array contains the columns list that need to be hidden.
866
- * @return {?}
867
- */
868
- function (hideMeasureColumns) {
869
- var _this = this;
870
- // only measure columns can be hidden
871
- /** @type {?} */
872
- var hideColumns = hideMeasureColumns ? hideMeasureColumns.filter(function (column) { return _this._MEASURE_COLUMNS.includes(column); }) : [];
873
- return hideColumns ? this._HIDED_COLUMNS.concat(hideColumns) : this._HIDED_COLUMNS;
874
- };
875
- /**
876
- * get header information and format it to {headKey: key, headText: text}
877
- */
878
- /**
879
- * get header information and format it to {headKey: key, headText: text}
880
- * @param {?} keys
881
- * @param {?} port
882
- * @return {?}
883
- */
884
- UIService.prototype.getHeader = /**
885
- * get header information and format it to {headKey: key, headText: text}
886
- * @param {?} keys
887
- * @param {?} port
888
- * @return {?}
889
- */
890
- function (keys, port) {
891
- var _this = this;
892
- return keys.map(function (key) { return ({ key: key, text: _this._getItemByKey(key, port).KPI }); });
893
- };
894
- /**
895
- * Get the selected items, which need to be displayed on the chart.
896
- * @param headerKeys array that contains the keys of header
897
- * @param port the relative port
898
- * @param defaultDisplayItems the items list that will be displayed by default.
899
- */
900
- /**
901
- * Get the selected items, which need to be displayed on the chart.
902
- * @param {?} headerKeys array that contains the keys of header
903
- * @param {?} port the relative port
904
- * @param {?} defaultDisplayItems the items list that will be displayed by default.
905
- * @return {?}
906
- */
907
- UIService.prototype.getDisplayItems = /**
908
- * Get the selected items, which need to be displayed on the chart.
909
- * @param {?} headerKeys array that contains the keys of header
910
- * @param {?} port the relative port
911
- * @param {?} defaultDisplayItems the items list that will be displayed by default.
912
- * @return {?}
913
- */
914
- function (headerKeys, port, defaultDisplayItems) {
915
- /** @type {?} */
916
- var selectionTable = this.getSelectionTableRows(headerKeys, port, defaultDisplayItems);
917
- return selectionTable.filter(function (row) { return row.checked; }).map(function (row) { return row.KPI; });
918
- };
919
- /**
920
- * Get the Y Scale by the keys and port
921
- */
922
- /**
923
- * Get the Y Scale by the keys and port
924
- * @param {?} keys
925
- * @param {?} port
926
- * @return {?}
927
- */
928
- UIService.prototype.getYScale = /**
929
- * Get the Y Scale by the keys and port
930
- * @param {?} keys
931
- * @param {?} port
932
- * @return {?}
933
- */
934
- function (keys, port) {
935
- var _this = this;
936
- /** @type {?} */
937
- var yScales = [];
938
- if (keys) {
939
- keys.forEach(function (key) {
940
- yScales.push(_this._getItemByKey(key, port)[Item.yScale]);
941
- });
942
- }
943
- return yScales;
944
- };
945
- /**
946
- * Generate Y Scale for the port
947
- */
948
- /**
949
- * Generate Y Scale for the port
950
- * @param {?} port
951
- * @return {?}
952
- */
953
- UIService.prototype.generateYScale = /**
954
- * Generate Y Scale for the port
955
- * @param {?} port
956
- * @return {?}
957
- */
958
- function (port) {
959
- var _this = this;
960
- /** @type {?} */
961
- var yScaleGroup = this._getYScaleGroupWithHistoryItems(port);
962
- UIService._YScaleGroupList.forEach(function (group) {
963
- /** @type {?} */
964
- var historyItems = yScaleGroup[group];
965
- if (historyItems) {
966
- _this._setYScaleOfGroup(historyItems, group);
967
- }
968
- });
969
- };
970
- /**
971
- * convert unit values (eg: byte to MB or GB) and generate the control data (sum, max, avg)
972
- * @param data the nameserver history data
973
- * @param header header list
974
- * @param port selected port
975
- */
976
- /**
977
- * convert unit values (eg: byte to MB or GB) and generate the control data (sum, max, avg)
978
- * @param {?} data the nameserver history data
979
- * @param {?} header header list
980
- * @param {?} port selected port
981
- * @return {?}
982
- */
983
- UIService.prototype.convertUnitAndGenerateControlData = /**
984
- * convert unit values (eg: byte to MB or GB) and generate the control data (sum, max, avg)
985
- * @param {?} data the nameserver history data
986
- * @param {?} header header list
987
- * @param {?} port selected port
988
- * @return {?}
989
- */
990
- function (data, header, port) {
991
- var _this = this;
992
- /** @type {?} */
993
- var promises = [];
994
- if (data && header) {
995
- data.forEach(function (row, index) {
996
- if (row) {
997
- // get detail history item key, like indexserverCpu
998
- /** @type {?} */
999
- var itemKey = header[index];
1000
- /** @type {?} */
1001
- var unit = _this._getProcessingUnit(itemKey, port);
1002
- promises.push(_this._convertUnitAndGenerateRowControlData(row, itemKey, unit, port));
1003
- }
1004
- });
1005
- }
1006
- return Promise.all(promises);
1007
- };
1008
- UIService.decorators = [
1009
- { type: Injectable }
1010
- ];
1011
- return UIService;
1012
- }());
1013
- export { UIService };
1014
- if (false) {
1015
- /**
1016
- * @type {?}
1017
- * @private
1018
- */
1019
- UIService.prototype._DEFAULT_DISPLAY_ITEMS;
1020
- /**
1021
- * @type {?}
1022
- * @private
1023
- */
1024
- UIService.prototype._HIDED_COLUMNS;
1025
- /**
1026
- * @type {?}
1027
- * @private
1028
- */
1029
- UIService.prototype._MEASURE_COLUMNS;
1030
- /**
1031
- * @type {?}
1032
- * @private
1033
- */
1034
- UIService.prototype._loadHistoryInfos;
1035
- }
1036
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1oYW5hLW5hbWVzZXJ2ZXItaGlzdG9yeS12aWV3ZXIvIiwic291cmNlcyI6WyJzcmMvbmFtZXNlcnZlci1oaXN0b3J5LXZpZXdlci9zZXJ2aWNlcy91aS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDMUgsT0FBTyxFQWlCTCxVQUFVLEVBQ1YsSUFBSSxFQUNKLFFBQVEsRUFDUixJQUFJLEVBQ0wsTUFBTSxVQUFVLENBQUM7OztBQUlsQjtJQUFBO1FBRW1CLDJCQUFzQixHQUFhLENBQUMsU0FBUyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2hGLG1CQUFjLEdBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNoRSxxQkFBZ0IsR0FBYSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRixzQkFBaUIsR0FBRyxFQUFFLENBQUM7SUEyaUJqQyxDQUFDO0lBemlCQzs7T0FFRzs7Ozs7O0lBQ1csbUJBQVM7Ozs7O0lBQXZCLFVBQXdCLEtBQW9CO1FBQXBCLHNCQUFBLEVBQUEsWUFBb0I7UUFDMUMsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO1lBQ2pCLEtBQUssR0FBRyxHQUFHLENBQUM7U0FDYjtRQUNELE9BQU87WUFDTCxPQUFPLEVBQTBCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDOztZQUN2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QUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQXlCLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsMkJBQTJCLENBQUMsQ0FBQzs7WUFDdFMsY0FBYyxHQUFvQixRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLDBCQUEwQixDQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsNkNBQTZDLENBQUMsQ0FBQzs7WUFDeFQsbUJBQW1CLEdBQWUsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSx1QkFBdUIsQ0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLHdDQUF3QyxDQUFDLENBQUM7O1lBQ25ULFVBQVUsR0FBd0IsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBUSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLG9DQUFvQyxDQUFDLENBQUM7O1lBQy9TLFdBQVcsR0FBdUIsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSwyQkFBMkIsQ0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLDREQUE0RCxDQUFDLENBQUM7O1lBQ3ZVLFVBQVUsR0FBd0IsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBUSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLHNCQUFzQixDQUFDLENBQUM7O1lBQ2pTLFFBQVEsR0FBMEIsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQW1CLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7O1lBQ3RSLFFBQVEsR0FBMEIsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQW1CLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7O1lBQ3RSLFNBQVMsR0FBeUIsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQWtCLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxF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QUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxrREFBa0QsQ0FBQyxDQUFDOztZQUM3VCxRQUFRLEdBQTBCLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsNkJBQTZCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSx1REFBdUQsQ0FBQyxDQUFDOztZQUNsVSxtQkFBbUIsR0FBZSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLHVCQUF1QixDQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsb0NBQW9DLENBQUMsQ0FBQzs7WUFDL1MsT0FBTyxHQUEyQixRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLGlCQUFpQixDQUFhLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQzs7WUFDM1MsbUJBQW1CLEdBQWUsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSx1QkFBdUIsQ0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLGlDQUFpQyxDQUFDLENBQUM7O1lBQzVTLFdBQVcsR0FBdUIsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQWUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxrQ0FBa0MsQ0FBQyxDQUFDOztZQUM3UyxhQUFhLEdBQXFCLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxpREFBaUQsQ0FBQyxDQUFDOztZQUM1VCxVQUFVLEdBQXdCLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDOztZQUNyUyxXQUFXLEdBQXVCLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMs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QyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLDhCQUE4QixDQUFDLENBQUM7O1lBQ3pTLGFBQWEsR0FBcUIsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxpQkFBaUIsQ0FBYSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLDRCQUE0QixDQUFDLENBQUM7O1lBQ3ZTLGFBQWEsR0FBcUIsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxpQkFBaUIsQ0FBYSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLG9DQUFvQyxDQUFDLENBQUM7O1lBQy9TLFlBQVksR0FBc0IsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLDJCQUEyQixDQUFDLENBQUM7O1lBQ3RTLFlBQVksR0FBc0IsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLG1DQUFtQyxDQUFDLENBQUM7O1lBQzlTLFlBQVksR0FBc0IsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLDJCQUEyQixDQUFDLENBQUM7O1lBQ3RTLFlBQVksR0FBc0IsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLHNDQUFzQyxDQUFDLENBQUM7O1lBQ2pULFdBQVcsR0FBdUIsUUFBUSxD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bmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBnZXRJZ25vcmVkTGluZU51bUZyb21UYWlsLCBpc1VuaXRUaW1lUmVsYXRlZCwgZ2V0VmFsdWVCeVVuaXQsIGdldFJvdW5kZWRWYWx1ZSwgY2FsY3VsYXRlWVNjYWxlIH0gZnJvbSAnLi4vdXRpbHMnO1xyXG5pbXBvcnQge1xyXG4gIENvbG9yUmdiYSxcclxuICBMb2FkSGlzdG9yeUluZm8sXHJcbiAgTG9hZEhpc3RvcnlJbmZvQmFja3VwLFxyXG4gIExvYWRIaXN0b3J5SW5mb0NvbHVtblN0b3JlLFxyXG4gIExvYWRIaXN0b3J5SW5mb0hvc3QsXHJcbiAgTG9hZEhpc3RvcnlJbmZvSW5kZXhTZXJ2ZXIsXHJcbiAgTG9hZEhpc3RvcnlJbmZvSXRlbSxcclxuICBMb2FkSGlzdG9yeUluZm9QZXJzaXN0ZW5jZSxcclxuICBMb2FkSGlzdG9yeUluZm9Sb3dTdG9yZSxcclxuICBMb2FkSGlzdG9yeUluZm9TZXNzaW9uQWRtaXNzaW9uQ29udHJvbCxcclxuICBMb2FkSGlzdG9yeUluZm9TUUwsXHJcbiAgTG9hZEhpc3RvcnlJbmZvU3luY1ByaW1pdGl2ZXMsXHJcbiAgTG9hZEhpc3RvcnlJbmZvVGhyZWFkcyxcclxuICBDaGFydENvbnRlbnREYXRhSXRlbSxcclxuICBDaGFydENvbnRlbnRIZWFkZXIsXHJcbiAgTGVnZW5kQ29sb3IsXHJcbiAgU2NhbGVHcm91cCxcclxuICBVbml0LFxyXG4gIFVuaXRUeXBlLFxyXG4gIEl0ZW1cclxufSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG4vLyBVc2luZyBkeW5hbWljIGZsYWcgdG8gZml4IHRoZSBpc3N1ZSBvZiBuZy1wYWNrYWdyICM2OTY6IExhbWJkYSBub3Qgc3VwcG9ydGVkXHJcbi8vIEBkeW5hbWljXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFVJU2VydmljZSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfREVGQVVMVF9ESVNQTEFZX0lURU1TOiBzdHJpbmdbXSA9IFsnY3B1VXNlZCcsICdpbmRleHNlcnZlck1lbVVzZWQnLCAnbXZjY051bSddO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX0hJREVEX0NPTFVNTlM6IHN0cmluZ1tdID0gW0l0ZW0ueVNjYWxlR3JvdXAsIEl0ZW0uZGVzY3JpcHRpb25dO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX01FQVNVUkVfQ09MVU1OUzogc3RyaW5nW10gPSBbSXRlbS5tYXgsIEl0ZW0uYXZlcmFnZSwgSXRlbS5zdW0sIEl0ZW0ubGFzdF07XHJcbiAgcHJpdmF0ZSBfbG9hZEhpc3RvcnlJbmZvcyA9IHt9O1xyXG5cclxuICAvKipcclxuICAgKiBnZXQgdGhlIGNvbG9ycyBmb3IgbGVnZW5kc1xyXG4gICAqL1xyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0Q29sb3JzKGFscGhhOiBudW1iZXIgPSBudWxsKTogTGVnZW5kQ29sb3Ige1xyXG4gICAgaWYgKGFscGhhID09IG51bGwpIHtcclxuICAgICAgYWxwaGEgPSAwLjg7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBjcHVVc2VkICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9nZXRSZ2JDb2xvcigxOTksIDIxLCAxMzMsIGFscGhhKSwgLy8gbWVkaXVtdmlvbGV0cmVkXHJcbiAgICAgIG1lbW9yeVJlc2lkZW50ICAgICAgICAgICAgICAgICA6IHRoaXMuX2dldFJnYkNvbG9yKDIzOCwgMTMwLCAyMzgsIGFscGhhKSwgLy8gdmlvbGV0XHJcbiAgICAgIG1lbW9yeVRvdGFsUmVzaWRlbnQgICAgICAgICAgICA6IHRoaXMuX2dldFJnYkNvbG9yKDcyLCA2MSwgMTM5LCBhbHBoYSksIC8vIGRhcmtzbGF0ZWJsdWVcclxuICAgICAgbWVtb3J5VXNlZCAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5fZ2V0UmdiQ29sb3IoMCwgMCwgMjA1LCBhbHBoYSksIC8vIG1lZGl1bWJsdWVcclxuICAgICAgbWVtb3J5TGltaXQgICAgICAgICAgICAgICAgICAgIDogdGhpcy5fZ2V0UmdiQ29sb3IoMjU1LCAxMDUsIDE4MCwgYWxwaGEpLCAvLyBob3RwaW5rXHJcbiAgICAgIG1lbW9yeVNpemUgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX2dldFJnYkNvbG9yKDcwLCAxMzAsIDE4MCwgYWxwaGEpLCAvLyBzdGVlbGJsdWVcclxuICAgICAgZGlza1VzZWQgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5fZ2V0UmdiQ29sb3IoMjUsIDI1LCAxMTIsIGFscGhhKSwgLy8gbWlkbmlnaHRibHVlXHJcbiAgICAgIGRpc2tTaXplICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX2dldFJnYkNvbG9yKDAsIDI1NSwgMjU1LCBhbHBoYSksIC8vIGFxdWFcclxuICAgICAgbmV0d29ya0luICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5fZ2V0UmdiQ29sb3IoMTAyLCA1MSwgMTUzLCBhbHBoYSksIC8vIHJlYmVjY2FwdXJwbGVcclxuICAgICAgbmV0d29ya091dCAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5fZ2V0UmdiQ29sb3IoMjQ1LCAyMjIsIDE3OSwgYWxwaGEpLCAvLyB3aGVhdFxyXG4gICAgICBzd2FwSW4gICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9nZXRSZ2JDb2xvcig0NywgNzksIDc5LCBhbHBoYSksIC8vIGRhcmtzbGF0ZWdyYXlcclxuICAgICAgc3dhcE91dCAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5fZ2V0UmdiQ29sb3IoMjA1LCA5MiwgOTIsIGFscGhhKSwgLy8gaW5kaWFucmVkXHJcbiAgICAgIGluZGV4c2VydmVyQ3B1ICAgICAgICAgICAgICAgICA6IHRoaXMuX2dldFJnYkNvbG9yKDI1NSwgOTksIDcxLCBhbHBoYSksIC8vIHRvbWF0b1xyXG4gICAgICBpbmRleHNlcnZlckNwdVN5cyAgICAgICAgICAgICAgOiB0aGlzLl9nZXRSZ2JDb2xvcigyNTUsIDIwLCAxNDcsIGFscGhhKSwgLy8gZGVlcHBpbmtcclxuICAgICAgaW5kZXhzZXJ2ZXJNZW1Vc2VkICAgICAgICAgICAgIDogdGhpcy5fZ2V0UmdiQ29sb3IoMCwgMjU1LCAwLCBhbHBoYSksIC8vIGxpbWVcclxuICAgICAgaW5kZXhzZXJ2ZXJNZW1MaW1pdCAgICAgICAgICAgIDogdGhpcy5fZ2V0UmdiQ29sb3IoMTM5LCAwLCAwLCBhbHBoYSksIC8vIGRhcmtyZWRcclxuICAgICAgaW5kZXhzZXJ2ZXJIYW5kbGVzICAgICAgICAgICAgIDogdGhpcy5fZ2V0UmdiQ29sb3IoMTM5LCAwLCAxMzksIGFscGhhKSwgLy8gZGFya21hZ2VudGFcclxuICAgICAgaW5kZXhzZXJ2ZXJQaW5ndGltZSAgICAgICAgICAgIDogdGhpcy5fZ2V0UmdiQ29sb3IoMTg5LCAxODMsIDEwNywgYWxwaGEpLCAvLyBkYXJra2hha2lcclxuICAgICAgaW5kZXhzZXJ2ZXJTd2FwSW4gICAgICAgICAgICAgIDogdGhpcy5fZ2V0UmdiQ29sb3IoMTEyLCAxMjgsIDE0NCwgYWxwaGEpLCAvLyBzbGF0ZWdyYXlcclxuICAgICAgc3FsQ29ubmVjdGlvbnMgICAgICAgICAgICAgICAgIDogdGhpcy5fZ2V0UmdiQ29sb3IoODUsIDEwNywgNDcsIGFscGhhKSwgLy8gZGFya29saXZlZ3JlZW5cclxuICAgICAgaW50ZXJuYWxDb25uZWN0aW9ucyAgICAgICAgICAgIDogdGhpcy5fZ2V0UmdiQ29sb3IoNDYsIDEzOSwgODcsIGFscGhhKSwgLy8gc2VhZ3JlZW5cclxuICAgICAgZXh0ZXJuYWxDb25uZWN0aW9ucyAgICAgICAgICAgIDogdGhpcy5fZ2V0UmdiQ29sb3IoMTQ3LCAxMTIsIDIxOSwgYWxwaGEpLCAvLyBtZWRpdW1wdXJwbGVcclxuICAgICAgaWRsZUNvbm5lY3Rpb25zICAgICAgICAgICAgICAgIDogdGhpcy5fZ2V0UmdiQ29sb3IoMjE2LCAxOTEsIDIxNiwgYWxwaGEpLCAvLyB0aGlzdGxlXHJcbiAgICAgIHNxbFRyYW5zYWN0aW9ucyAgICAgICAgICAgICAgICA6IHRoaXMuX2dldFJnYkNvbG9yKDIyMCwgMjAsIDYwLCBhbHBoYSksIC8vIGNyaW1zb25cclxuICAgICAgaW50ZXJuYWxUcmFuc2FjdGlvbnMgICAgICAgICAgIDogdGhpcy5fZ2V0UmdiQ29sb3IoMTg2LCA4NSwgMjExLCBhbHBoYSksIC8vIG1lZGl1bW9yY2hpZFxyXG4gICAgICBleHRlcm5hbFRyYW5zYWN0aW9ucyAgICAgICAgICAgOiB0aGlzLl9nZXRSZ2JDb2xvcigyMjEsIDE2MCwgMjIxLCBhbHBoYSksIC8vIHBsdW1cclxuICAgICAgdXNlclRyYW5zYWN0aW9ucyAgICAgICAgICAgICAgIDogdGhpcy5fZ2V0UmdiQ29sb3IoMjEwLCAxMDUsIDMwLCBhbHBoYSksIC8vIGNob2NvbGF0ZVxyXG4gICAgICBzcWxCbG9ja2VkVHJhbnMgICAgICAgICAgICAgICAgOiB0aGlzLl9nZXRSZ2JDb2xvcigwLCAwLCAyNTUsIGFscGhhKSwgLy8gYmx1ZVxyXG4gICAgICBzcWxTdGF0ZW1lbnRzICAgICAgICAgICAgICAgICAgOiB0aGlzLl9nZXRSZ2JDb2xvcigxODgsIDE0MywgMTQzLCBhbHBoYSksIC8vIHJvc3licm93blxyXG4gICAgICBjaWRSYW5nZSAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9nZXRSZ2JDb2xvcigzMiwgMTc4LCAxNzAsIGFscGhhKSwgLy8gbGlnaHRzZWFncmVlblxyXG4gICAgICB0aWRSYW5nZSAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9nZXRSZ2JDb2xvcigxMjQsIDI1MiwgMCwgYWxwaGEpLCAvLyBsYXduZ3JlZW5cclxuICAgICAgcGVuZGluZ1JlcXVlc3RDb3VudCAgICAgICAgICAgIDogdGhpcy5fZ2V0UmdiQ29sb3IoMTYwLCAzMiwgMjQwLCBhbHBoYSksIC8vIHB1cnBsZTNcclxuICAgICAgbXZjY051bSAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5fZ2V0UmdiQ29sb3IoNjUsIDEwNSwgMjI1LCBhbHBoYSksIC8vIHJveWFsYmx1ZVxyXG4gICAgICBhY3F1aXJlZFJlY29yZExvY2tzICAgICAgICAgICAgOiB0aGlzLl9nZXRSZ2JDb2xvcigwLCAyNTAsIDE1NCwgYWxwaGEpLCAvLyBtZWRpdW1zcHJpbmdncmVlblxyXG4gICAgICBzZWFyY2hDb3VudCAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9nZXRSZ2JDb2xvcigxMjcsIDI1NSwgMjEyLCBhbHBoYSksIC8vIGFxdWFtYXJpbmVcclxuICAgICAgaW5kZXhpbmdDb3VudCAgICAgICAgICAgICAgICAgIDogdGhpcy5fZ2V0UmdiQ29sb3IoMCwgMTkxLCAyNTUsIGFscGhhKSwgLy8gZGVlcHNreWJsdWVcclxuICAgICAgbWVyZ2VDb3VudCAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5fZ2V0UmdiQ29sb3IoMTM1LCAyMDYsIDIzNSwgYWxwaGEpLCAvLyBza3libHVlXHJcbiAgICAgIHVubG9hZENvdW50ICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX2dldFJnYkNvbG9yKDI1NSwgMTY1LCAwLCBhbHBoYSksIC8vIG9yYW5nZVxyXG4gICAgICBpbmRleHNlcnZlclRocmVhZHMgICAgICAgICAgICAgOiB0aGlzLl9nZXRSZ2JDb2xvcigwLCAxMDAsIDAsIGFscGhhKSwgLy8gZGFya2dyZWVuXHJcbiAgICAgIHdhaXRpbmdUaHJlYWRzICAgICAgICAgICAgICAgICA6IHRoaXMuX2dldFJnYkNvbG9yKDE3NiwgNDgsIDk2LCBhbHBoYSksIC8vIG1hcm9vbjNcclxuICAgICAgdG90YWxUaHJlYWRzICAgICAgICAgICAgICAgICAgIDogdGhpcy5fZ2V0UmdiQ29sb3IoMTAwLCAxNDksIDIzNywgYWxwaGEpLCAvLyBjb3JuZmxvd2VyXHJcbiAgICAgIGFjdGl2ZVNxbEV4ZWN1dG9ycyAgICAgICAgICAgICA6IHRoaXMuX2dldFJnYkNvbG9yKDE3NSwgMjM4LCAyMzgsIGFscGhhKSwgLy8gcGFsZXR1cnF1b2lzZVxyXG4gICAgICB3YWl0aW5nU3FsRXhlY3V0b3JzICAgICAgICAgICAgOiB0aGlzLl9nZXRSZ2JDb2xvcig1MCwgMjA1LCA1MCwgYWxwaGEpLCAvLyBsaW1lZ3JlZW5cclxuICAgICAgdG90YWxTcWxFeGVjdXRvcnMgICAgICAgICAgICAgIDogdGhpcy5fZ2V0UmdiQ29sb3IoMjQwLCAyMzAsIDE0MCwgYWxwaGEpLCAvLyBraGFraVxyXG4gICAgICBkYXRhV3JpdGVTaXplICAgICAgICAgICAgICAgICAgOiB0aGlzLl9nZXRSZ2JDb2xvcigxMDIsIDIwNSwgMTcwLCBhbHBoYSksIC8vIG1lZGl1bWFxdWFtYXJpbmVcclxuICAgICAgZGF0YVdyaXRlVGltZSAgICAgICAgICAgICAgICAgIDogdGhpcy5fZ2V0UmdiQ29sb3IoMTY5LCAxNjksIDE2OSwgYWxwaGEpLCAvLyBkYXJrZ3JheVxyXG4gICAgICBsb2dXcml0ZVNpemUgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9nZXRSZ2JDb2xvcigxNjAsIDgyLCA0NSwgYWxwaGEpLCAvLyBzaWVubmFcclxuICAgICAgbG9nV3JpdGVUaW1lICAgICAgICAgICAgICAgICAgIDogdGhpcy5fZ2V0UmdiQ29sb3IoMTI4LCAxMjgsIDAsIGFscGhhKSwgLy8gb2xpdmVcclxuICAgICAgZGF0YVJlYWRTaXplICAgICAgICAgICAgICAgICAgIDogdGhpcy5fZ2V0UmdiQ29sb3IoMjU1LCAyMTUsIDAsIGFscGhhKSwgLy8gZ29sZFxyXG4gICAgICBkYXRhUmVhZFRpbWUgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9nZXRSZ2JDb2xvcig5NSwgMTU4LCAxNjAsIGFscGhhKSwgLy8gY2FkZXRibHVlXHJcbiAgICAgIGxvZ1JlYWRTaXplICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX2dldFJnYkNvbG9yKDI1NSwgMCwgMCwgYWxwaGEpLCAvLyByZWRcclxuICAgICAgbG9nUmVhZFRpbWUgICAgICAgICAgICAgICAgICAgIDogdGhpcy5fZ2V0UmdiQ29sb3IoMTg0LCAxMzQsIDExLCBhbHBoYSksIC8vIGRhcmtnb2xkZW5yb2RcclxuICAgICAgZGF0YUJhY2t1cFdyaXRlU2l6ZSAgICAgICAgICAgIDogdGhpcy5fZ2V0UmdiQ29sb3IoMjU1LCAyNTUsIDAsIGFscGhhKSwgLy8geWVsbG93XHJcbiAgICAgIGRhdGFCYWNrdXBXcml0ZVRpbWUgICAgICAgICAgICA6IHRoaXMuX2dldFJnYkNvbG9yKDE1NCwgMjA1LCA1MCwgYWxwaGEpLCAvLyB5ZWxsb3dncmVlblxyXG4gICAgICBsb2dCYWNrdXBXcml0ZVNpemUgICAgICAgICAgICAgOiB0aGlzLl9nZXRSZ2JDb2xvcigwLCAwLCAxMzksIGFscGhhKSwgLy8gZGFya2JsdWVcclxuICAgICAgbG9nQmFja3VwV3JpdGVUaW1lICAgICAgICAgICAgIDogdGhpcy5fZ2V0UmdiQ29sb3IoMjE5LCAxMTIsIDE0NywgYWxwaGEpLCAvLyBwYWxldmlvbGV0cmVkXHJcbiAgICAgIG11dGV4Q29sbGlzaW9uQ291bnQgICAgICAgICAgICA6IHRoaXMuX2dldFJnYkNvbG9yKDI0NCwgMTY0LCA5NiwgYWxwaGEpLCAvLyBzYW5keWJyb3duXHJcbiAgICAgIHJlYWRXcml0ZUxvY2tDb2xsaXNpb25Db3VudCAgICA6IHRoaXMuX2dldFJnYkNvbG9yKDIzMywgMTUwLCAxMjIsIGFscGhhKSwgLy8gZGFya3NhbG1vblxyXG4gICAgICBhZG1pc3NpbkNvbnRyb2xBZG1pdENvdW50ICAgICAgOiB0aGlzLl9nZXRSZ2JDb2xvcigxNDMsIDE4OCwgMTQzLCBhbHBoYSksIC8vIGRhcmtzZWFncmVlblxyXG4gICAgICBhZG1pc3Npb25Db250cm9sUmVqZWN0Q291bnQgICAgOiB0aGlzLl9nZXRSZ2JDb2xvcigyNTUsIDAsIDI1NSwgYWxwaGEpLCAvLyBmdWNoc2lhXHJcbiAgICAgIGFkbWlzc2lvbkNvbnRyb2xXYWl0aW5nUmVxdWVzdHM6IHRoaXMuX2dldFJnYkNvbG9yKDE1MywgNTAsIDIwNCwgYWxwaGEpLCAvLyBkYXJrb3JjaGlkXHJcbiAgICAgIGFkbWlzc2lvbkNvbnRyb2xXYWl0VGltZSAgICAgICA6IHRoaXMuX2dldFJnYkNvbG9yKDE0NCwgMjM4LCAxNDQsIGFscGhhKSwgLy8gbGlnaHRncmVlblxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGdldCBfdW5pdFR5cGUoKTogYW55IHtcclxuICAgIGNvbnN0IHVuaXRUeXBlID0ge307XHJcbiAgICB1bml0VHlwZVtVbml0LlBDVF0gPSBVbml0VHlwZS5UeXBlRUE7XHJcbiAgICB1bml0VHlwZVtVbml0Lk1TXSA9IFVuaXRUeXBlLlR5cGVFQTtcclxuICAgIHVuaXRUeXBlW1VuaXQuRW1wdHldID0gVW5pdFR5cGUuVHlwZUVBO1xyXG4gICAgdW5pdFR5cGVbVW5pdC5HQl0gPSBVbml0VHlwZS5UeXBlR0I7XHJcbiAgICB1bml0VHlwZVtVbml0Lk1CXSA9IFVuaXRUeXBlLlR5cGVNQjtcclxuICAgIHVuaXRUeXBlW1VuaXQuTUJQZXJTZWNdID0gVW5pdFR5cGUuVHlwZU1CU2VjO1xyXG4gICAgdW5pdFR5cGVbVW5pdC5TZWNQZXJTZWNdID0gVW5pdFR5cGUuVHlwZVNlY1NlYztcclxuICAgIHVuaXRUeXBlW1VuaXQuU3RtdFBlclNlY10gPSBVbml0VHlwZS5UeXBlU2VjO1xyXG4gICAgdW5pdFR5cGVbVW5pdC5SZXFQZXJTZWNdID0gVW5pdFR5cGUuVHlwZVNlYztcclxuICAgIHVuaXRUeXBlW1VuaXQuQ29sUGVyU2VjXSA9IFVuaXRUeXBlLlR5cGVTZWM7XHJcbiAgICByZXR1cm4gdW5pdFR5cGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBnZXQgeVNjYWxlIGdyb3VwIGxpc3QgZnJvbSB0aGUgZW51bSBTY2FsZUdyb3VwXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0IF9ZU2NhbGVHcm91cExpc3QoKTogYW55W10ge1xyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKFNjYWxlR3JvdXApLmZpbHRlcihrZXkgPT4gIWlzTmFOKE51bWJlcihTY2FsZUdyb3VwW2tleV0pKSkubWFwKGtleSA9PiBTY2FsZUdyb3VwW2tleV0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2VuZXJhdGUgb25lIGl0ZW0gYnkgdGhlIHByb3ZpZGVkIGF0dHJpYnV0ZXMgYW5kIHZhbHVlc1xyXG4gICAqIEBwYXJhbSBhcmdzIHRoZSBkeW5hbWljIHBhcmFtZXRlciBvZiBbYXR0cmlidXRlLCB2YWx1ZV1cclxuICAgKi9cclxuICBwcml2YXRlIHN0YXRpYyBfZ2VuZXJhdGVMb2FkSGlzdG9yeUluZm9JdGVtKC4uLmFyZ3MpOiBMb2FkSGlzdG9yeUluZm9JdGVtIHtcclxuICAgIGNvbnN0IG9iaiA9IHt9O1xyXG4gICAgaWYgKCFhcmdzIHx8IGFyZ3MubGVuZ3RoIDw9IDApIHtcclxuICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuXHJcbiAgICBhcmdzLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgIGlmIChpdGVtICYmIGl0ZW0ubGVuZ3RoID49IDIpIHtcclxuICAgICAgICBvYmpbaXRlbVswXV0gPSBpdGVtWzFdO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBvYmo7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBnZW5lcmF0ZSB0aGUgbG9hZEhpc3RvcnlJbmZvIG9iamVjdCB3aXRoIGRlZmF1bHQgdmFsdWVzLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgc3RhdGljIF9nZW5lcmF0ZUxvYWRIaXN0b3J5SW5mbygpOiBMb2FkSGlzdG9yeUluZm8ge1xyXG4gICAgLy8gbWluaW11bSB2YWx1ZSBmb3IgWVNjYWxlIG9mIHN3YXBJbiwgc3dhcE91dCwgaW5kZXhzZXJ2ZXJTd2FwSW4gaXMgMTAwIChhY2NvcmRpbmcgdG8gaGFuYSBzdHVkaW8pXHJcbiAgICBjb25zdCBpbmZvSXRlbSA9IFVJU2VydmljZS5fZ2VuZXJhdGVMb2FkSGlzdG9yeUluZm9JdGVtOyAvLyBqdXN0IGZvciBtYWtpbmcgdGhlIG5hbWUgc2hvcnRlci4uLlxyXG4gICAgY29uc3QgY3B1VXNlZCAgICAgICAgICAgICAgICAgICAgICAgICA9IGluZm9JdGVtKFtJdGVtLmtwaSwgJ0NQVScgICAgICAgICAgICAgICAgICAgICAgICBdLCBbSXRlbS55U2NhbGUsIDAsIF0sIFtJdGVtLnlTY2FsZUdyb3VwLCBTY2FsZUdyb3VwLkNQVSAgICBdLCBbSXRlbS51bml0LCBVbml0LlBDVCAgICAgICAgXSwgW0l0ZW0ubWF4LCAtMV0sIFtJdGVtLmF2ZXJhZ2UsIC0xXSwgW0l0ZW0uc3VtLCAtMV0sIFtJdGVtLmxhc3QsIC0xXSwgW0l0ZW0uZGVzY3JpcHRpb24sICdDUFUgVXNlZCBieSBhbGwgcHJvY2Vzc2VzJ10pO1xyXG4gICAgY29uc3QgbWVtb3J5UmVzaWRlbnQgICAgICAgICAgICAgICAgICA9IGluZm9JdGVtKFtJdGVtLmtwaSwgJ0RhdGFiYXNlIFJlc2lkZW50IE1lbW9yeScgICBdLCBbSXRlbS55U2NhbGUsIDAsIF0sIFtJdGVtLnlTY2FsZUdyb3VwLCBTY2FsZUdyb3VwLk1lbW9yeSBdLCBbSXRlbS51bml0LCBVbml0Lk1CICAgICAgICAgXSwgW0l0ZW0ubWF4LCAtMV0sIFtJdGVtLmF2ZXJhZ2UsIC0xXSwgW0l0ZW0uc3VtLCAtMV0sIFtJdGVtLmxhc3QsIC0xXSwgW0l0ZW0uZGVzY3JpcHRpb24sICdQaHlzaWNhbCBtZW1vcnkgdXNlZCBmb3IgYWxsIEhBTkEgcHJvY2Vzc2VzJ10pO1xyXG4gICAgY29uc3QgbWVtb3J5VG90YWxSZXNpZGVudCAgICAgICAgICAgICA9IGluZm9JdGVtKFtJdGVtLmtwaSwgJ1RvdGFsIFJlc2lkZW50IE1lbW9yeScgICAgICBdLCBbSXRlbS55U2NhbGUsIDAsIF0sIFtJdGVtLnlTY2FsZUdyb3VwLCBTY2FsZUdyb3VwLk1lbW9yeSBdLCBbSXRlbS51bml0LCBVbml0Lk1CICAgICAgICAgXSwgW0l0ZW0ubWF4LCAtMV0sIFtJdGVtLmF2ZXJhZ2UsIC0xXSwgW0l0ZW0uc3VtLCAtMV0sIFtJdGVtLmxhc3QsIC0xXSwgW0l0ZW0uZGVzY3JpcHRpb24sICdQaHlzaWNhbCBtZW1vcnkgdXNlZCBmb3IgYWxsIHByb2Nlc3NlcyddKTtcclxuICAgIGNvbnN0IG1lbW9yeVVzZWQgICAgICAgICAgICAgICAgICAgICAgPSBpbmZvSXRlbShbSXRlbS5rcGksICdEYXRhYmFzZSBVc2VkIE1lbW9yeScgICAgICAgXSwgW0l0ZW0ueVNjYWxlLCAwLCBdLCBbSXRlbS55U2NhbGVHcm91cCwgU2NhbGVHcm91cC5NZW1vcnkgXSwgW0l0ZW0udW5pdCwgVW5pdC5NQiAgICAgICAgIF0sIFtJdGVtLm1heCwgLTFdLCBbSXRlbS5hdmVyYWdlLCAtMV0sIFtJdGVtLnN1bSwgLTFdLCBbSXRlbS5sYXN0LCAtMV0sIFtJdGVtLmRlc2NyaXB0aW9uLCAnTWVtb3J5IHVzZWQgZm9yIGFsbCBIQU5BIHByb2Nlc3NlcyddKTtcclxuICAgIGNvbnN0IG1lbW9yeUxpbWl0ICAgICAgICAgICAgICAgICAgICAgPSBpbmZvSXRlbShbSXRlbS5rcGksICdEYXRhYmFzZSBBbGxvY2F0aW9uIExpbWl0JyAgXSwgW0l0ZW0ueVNjYWxlLCAwLCBdLCBbSXRlbS55U2NhbGVHcm91cCwgU2NhbGVHcm91cC5NZW1vcnkgXSwgW0l0ZW0udW5pdCwgVW5pdC5NQiAgICAgICAgIF0sIFtJdGVtLm1heCwgLTFdLCBbSXRlbS5hdmVyYWdlLCAtMV0sIFtJdGVtLnN1bSwgLTFdLCBbSXRlbS5sYXN0LCAtMV0sIFtJdGVtLmRlc2NyaXB0aW9uLCAnTWVtb3J5IGFsbG9jYXRpb24gbGltaXQgZm9yIGFsbCBwcm9jZXNzZXMgb2YgSEFOQSBpbnN0YW5jZSddKTtcclxuICAgIGNvbnN0IG1lbW9yeVNpemUgICAgICAgICAgICAgICAgICAgICAgPSBpbmZvSXRlbShbSXRlbS5rcGksICdQaHlzaWNhbCBNZW1vcnkgU2l6ZScgICAgICAgXSwgW0l0ZW0ueVNjYWxlLCAwLCBdLCBbSXRlbS55U2NhbGVHcm91cCwgU2NhbGVHcm91cC5NZW1vcnkgXSwgW0l0ZW0udW5pdCwgVW5pdC5NQiAgICAgICAgIF0sIFtJdGVtLm1heCwgLTFdLCBbSXRlbS5hdmVyYWdlLCAtMV0sIFtJdGVtLnN1bSwgLTFdLCBbSXRlbS5sYXN0LCAtMV0sIFtJdGVtLmRlc2NyaXB0aW9uLCAnUGh5c2ljYWwgbWVtb3J5IHNpemUnXSk7XHJcbiAgICBjb25zdCBkaXNrVXNlZCAgICAgICAgICAgICAgICAgICAgICAgID0gaW5mb0l0ZW0oW0l0ZW0ua3BpLCAnRGlzayBVc2VkJyAgICAgICAgICAgICAgICAgIF0sIFtJdGVtLnlTY2FsZSwgMCwgXSwgW0l0ZW0ueVNjYWxlR3JvdXAsIFNjYWxlR3JvdXAuRGlzayAgIF0sIFtJdGVtLnVuaXQsIFVuaXQuR0IgICAgICAgICBdLCBbSXRlbS5tYXgsIC0xXSwgW0l0ZW0uYXZlcmFnZSwgLTFdLCBbSXRlbS5zdW0sIC0xXSwgW0l0ZW0ubGFzdCwgLTFdLCBbSXRlbS5kZXNjcmlwdGlvbiwgJ0Rpc2sgdXNlZCddKTtcclxuICAgIGNvbnN0IGRpc2tTaXplICAgICAgICAgICAgICAgICAgICAgICAgPSBpbmZvSXRlbShbSXRlbS5rcGksICdEaXNrIFNpemUnICAgICAgICAgICAgICAgICAgXSwgW0l0ZW0ueVNjYWxlLCAwLCBdLCBbSXRlbS55U2NhbGVHcm91cCwgU2NhbGVHcm91cC5EaXNrICAgXSwgW0l0ZW0udW5pdCwgVW5pdC5HQiAgICAgICAgIF0sIFtJdGVtLm1heCwgLTFdLCBbSXRlbS5hdmVyYWdlLCAtMV0sIFtJdGVtLnN1bSwgLTFdLCBbSXRlbS5sYXN0LCAtMV0sIFtJdGVtLmRlc2NyaXB0aW9uLCAnRGlzayBzaXplJ10pO1xyXG4gICAgY29uc3QgbmV0d29ya0luICAgICAgICAgICAgICAgICAgICAgICA9IGluZm9JdGVtKFtJdGVtLmtwaSwgJ05ldHdvcmsgSW4nICAgICAgICAgICAgICAgICBdLCBbSXRlbS55U2NhbGUsIDAsIF0sIFtJdGVtLnlTY2FsZUdyb3VwLCBTY2FsZUdyb3VwLk5ldHdvcmtdLCBbSXRlbS51bml0LCBVbml0Lk1CUGVyU2VjICAgXSwgW0l0ZW0ubWF4LCAtMV0sIFtJdGVtLmF2ZXJhZ2UsIC0xXSwgW0l0ZW0uc3VtLCAtMV0sIFtJdGVtLmxhc3QsIC0xXSwgW0l0ZW0uZGVzY3JpcHRpb24sICdCeXRlcyByZWFkIGZyb20gbmV0d29yayBieSBhbGwgcHJvY2Vzc2VzJ10pO1xyXG4gICAgY29uc3QgbmV0d29ya091dCAgICAgICAgICAgICAgICAgICAgICA9IGluZm9JdGVtKFtJdGVtLmtwaSwgJ05ldHdvcmsgT3V0JyAgICAgICAgICAgICAgICBdLCBbSXRlbS55U2NhbGUsIDAsIF0sIFtJdGVtLnlTY2FsZUdyb3VwLCBTY2FsZUdyb3VwLk5ldHdvcmtdLCBbSXRlbS51bml0LCBVbml0Lk1CUGVyU2VjICAgXSwgW0l0ZW0ubWF4LCAtMV0sIFtJdGVtLmF2ZXJhZ2UsIC0xXSwgW0l0ZW0uc3VtLCAtMV0sIFtJdGVtLmxhc3QsIC0xXSwgW0l0ZW0uZGVzY3JpcHRpb24sICdCeXRlcyB3cml0dGVuIHRvIG5ldHdvcmsgYnkgYWxsIHByb2Nlc3NlcyddKTtcclxuICAgIGNvbnN0IHN3YXBJbiAgICAgICAgICAgICAgICAgICAgICAgICAgPSBpbmZvSXRlbShbSXRlbS5rcGksICdTd2FwIEluJyAgICAgICAgICAgICAgICAgICAgXSwgW0l0ZW0ueVNjYWxlLCAxMDBdLCBbSXRlbS55U2NhbGVHcm91cCwgU2NhbGVHcm91cC5Td2FwICAgXSwgW0l0ZW0udW5pdCwgVW5pdC5NQlBlclNlYyAgIF0sIFtJdGVtLm1heCwgLTFdLCBbSXRlbS5hdmVyYWdlLCAtMV0sIFtJdGVtLnN1bSwgLTFdLCBbSXRlbS5sYXN0LCAtMV0sIFtJdGVtLmRlc2NyaXB0aW9uLCAnQnl0ZXMgcmVhZCBmcm9tIHN3YXAgYnkgYWxsIHByb2Nlc3NlcyAocHN3cGluIGxpbmUgaW4gL3Byb2Mvdm1zdGF0ICogc3lzY29uZihfU0NfUEFHRVNJWkUpKSddKTtcclxuICAgIGNvbnN0IHN3YXBPdXQgICAgICAgICAgICAgICAgICAgICAgICAgPSBpbmZvSXRlbShbSXRlbS5rcGksICdTd2FwIE91dCcgICAgICAgICAgICAgICAgICAgXSwgW0l0ZW0ueVNjYWxlLCAxMDBdLCBbSXRlbS55U2NhbGVHcm91cCwgU2NhbGVHcm91cC5Td2FwICAgXSwgW0l0ZW0udW5pdCwgVW5pdC5NQlBlclNlYyAgIF0sIFtJdGVtLm1heCwgLTFdLCBbSXRlbS5hdmVyYWdlLCAtMV0sIFtJdGVtLnN1bSwgLTFdLCBbSXRlbS5sYXN0LCAtMV0sIFtJdGVtLmRlc2NyaXB0aW9uLCAnQnl0ZXMgd3JpdHRlbiBUbyBzd2FwIGJ5IGFsbCBwcm9jZXNzZXMgKHBzd3BvdXQgbGluZSBpbiAvcHJvYy92bXN0YXQgKiBzeXNjb25mKF9TQ19QQUdFU0laRSkpJ10pO1xyXG4gICAgY29uc3QgaW5kZXhzZXJ2ZXJDcHUgICAgICAgICAgICAgICAgICA9IGluZm9JdGVtKFtJdGVtLmtwaSwgJ0luZGV4IFNlcnZlciBDUFUnICAgICAgICAgICBdLCBbSXRlbS55U2NhbGUsIDAsIF0sIFtJdGVtLnlTY2FsZUdyb3VwLCBTY2FsZUdyb3VwLkNQVSAgICBdLCBbSXRlbS51bml0LCBVbml0LlBDVCAgICAgICAgXSwgW0l0ZW0ubWF4LCAtMV0sIFtJdGVtLmF2ZXJhZ2UsIC0xXSwgW0l0ZW0uc3VtLCAtMV0sIFtJdGVtLmxhc3QsIC0xXSwgW0l0ZW0uZGVzY3JpcHRpb24sICdDUFUgdXNlZCBieSBTZXJ2aWNlJ10pO1xyXG4gICAgY29uc3QgaW5kZXhzZXJ2ZXJDcHVTeXMgICAgICAgICAgICAgICA9IGluZm9JdGVtKFtJdGVtLmtwaSwgJ1N5c3RlbSBDUFUnICAgICAgICAgICAgICAgICBdLCBbSXRlbS55U2NhbGUsIDAsIF0sIFtJdGVtLnlTY2FsZUdyb3VwLCBTY2FsZUdyb3VwLkNQVSAgICBdLCBbSXRlbS51bml0LCBVbml0LlBDVCAgICAgICAgXSwgW0l0ZW0ubWF4LCAtMV0sIFtJdGVtLmF2ZXJhZ2UsIC0xXSwgW0l0ZW0uc3VtLCAtMV0sIFtJdGVtLmxhc3QsIC0xXSwgW0l0ZW0uZGVzY3JpcHRpb24sICdPUyBLZXJuZWwvU3lzdGVtIENQVSB1c2VkIGJ5IFNlcnZpY2UnXSk7XHJcbiAgICBjb25zdCBpbmRleHNlcnZlck1lbVVzZWQgICAgICAgICAgICAgID0gaW5mb0l0ZW0oW0l0ZW0ua3BpLCAnTWVtb3J5IFVzZWQnICAgICAgICAgICAgICAgIF0sIFtJdGVtLnlTY2FsZSwgMCwgXSwgW0l0ZW0ueVNjYWxlR3JvdXAsIFNjYWxlR3JvdXAuTWVtb3J5IF0sIFtJdGVtLnVuaXQsIFVuaXQuTUIgICAgICAgICBdLCBbSXRlbS5tYXgsIC0xXSwgW0l0ZW0uYXZlcmFnZSwgLTFdLCBbSXRlbS5zdW0sIC0xXSwgW0l0ZW0ubGFzdCwgLTFdLCBbSXRlbS5kZXNjcmlwdGlvbiwgJ01lbW9yeSB1c2VkIGJ5IFNlcnZpY2UnXSk7XHJcbiAgICBjb25zdCBpbmRleHNlcnZlck1lbUxpbWl0ICAgICAgICAgICAgID0gaW5mb0l0ZW0oW0l0ZW0ua3BpLCAnTWVtb3J5IEFsbG9jYXRpb24gTGltaXQnICAgIF0sIFtJdGVtLnlTY2FsZSwgMCwgXSwgW0l0ZW0ueVNjYWxlR3JvdXAsIFNjYWxlR3JvdXAuTWVtb3J5IF0sIFtJdGVtLnVuaXQsIFVuaXQuTUIgICAgICAgICBdLCBbSXRlbS5tYXgsIC0xXSwgW0l0ZW0uYXZlcmFnZSwgLTFdLCBbSXRlbS5zdW0sIC0xXSwgW0l0ZW0ubGFzdCwgLTFdLCBbSXRlbS5kZXNjcmlwdGlvbiwgJ01lbW9yeSBhbGxvY2F0aW9uIGxpbWl0IGZvciBTZXJ2aWNlJ10pO1xyXG4gICAgY29uc3QgaW5kZXhzZXJ2ZXJIYW5kbGVzICAgICAgICAgICAgICA9IGluZm9JdGVtKFtJdGVtLmtwaSwgJ0hhbmRsZXMnICAgICAgICAgICAgICAgICAgICBdLCBbSXRlbS55U2NhbGUsIDAsIF0sIFtJdGVtLnlTY2FsZUdyb3VwLCBTY2FsZUdyb3VwLlVua25vd25dLCBbSXRlbS51bml0LCBVbml0LkVtcHR5ICAgICAgXSwgW0l0ZW0ubWF4LCAtMV0sIFtJdGVtLmF2ZXJhZ2UsIC0xXSwgW0l0ZW0uc3VtLCAtMV0sIFtJdGVtLmxhc3QsIC0xXSwgW0l0ZW0uZGVzY3JpcHRpb24sICdOdW1iZXIgb2Ygb3BlbiBoYW5kbGVzJ10pO1xyXG4gICAgY29uc3QgaW5kZXhzZXJ2ZXJQaW5ndGltZSAgICAgICAgICAgICA9IGluZm9JdGVtKFtJdGVtLmtwaSwgJ1BpbmcgVGltZScgICAgICAgICAgICAgICAgICBdLCBbSXRlbS55U2NhbGUsIDAsIF0sIFtJdGVtLnlTY2FsZUdyb3VwLCBTY2FsZUdyb3VwLlVua25vd25dLCBbSXRlbS51bml0LCBVbml0Lk1TICAgICAgICAgXSwgW0l0ZW0ubWF4LCAtMV0sIFtJdGVtLmF2ZXJhZ2UsIC0xXSwgW0l0ZW0uc3VtLCAtMV0sIFtJdGVtLmxhc3QsIC0xXSwgW0l0ZW0uZGVzY3JpcHRpb24sICdEdXJhdGlvbiBvZiBTZXJ2aWNlIHBpbmcgcmVxdWVzdCAoVEhSRUFEX01FVEhPRD1cXCdfX25zV2F0Y2hkb2dcXCcpLiBUaGlzIHJlcXVlc3QgaW5jbHVkZXMgdGhlIGNvbGxlY3Rpb24gb2Ygc2VydmljZSBzcGVjaWZpYyBLUElcXCdzJ10pO1xyXG4gICAgY29uc3QgaW5kZXhzZXJ2ZXJTd2FwSW4gICAgICAgICAgICAgICA9IGluZm9JdGVtKFtJdGVtLmtwaSwgJ0luZGV4IFNlcnZlciBTd2FwIEluJyAgICAgICBdLCBbSXRlbS55U2NhbGUsIDEwMF0sIFtJdGVtLnlTY2FsZUdyb3VwLCBTY2FsZUdyb3VwLlN3YXAgICBdLCBbSXRlbS51bml0LCBVbml0Lk1CUGVyU2VjICAgXSwgW0l0ZW0ubWF4LCAtMV0sIFtJdGVtLmF2ZXJhZ2UsIC0xXSwgW0l0ZW0uc3VtLCAtMV0sIFtJdGVtLmxhc3QsIC0xXSwgW0l0ZW0uZGVzY3JpcHRpb24sICdCeXRlcyByZWFkIGZyb20gc3dhcCBieSBTZXJ2aWNlIChjb2x1bW4gMTIobWFqZmx0KSBpbiAvcHJvYy88cGlkPi9zdGF0ICogc3lzY29uZihfU0NfUEFHRVNJWkUpKSddKTtcclxuICAgIGNvbnN0IHNxbENvbm5lY3Rpb25zICAgICAgICAgICAgICAgICAgPSBpbmZvSXRlbShbSXRlbS5rcGksICdPcGVuIENvbm5lY3Rpb25zJyAgICAgICAgICAgXSwgW0l0ZW0ueVNjYWxlLCAwLCBdLCBbSXRlbS55U2NhbGVHcm91cCwgU2NhbGVHcm91cC5Db25uICAgXSwgW0l0ZW0udW5pdCwgVW5pdC5FbXB0eSAgICAgIF0sIFtJdGVtLm1heCwgLTFdLCBbSXRlbS5hdmVyYWdlLCAtMV0sIFtJdGVtLnN1bSwgLTFdLCBbSXRlbS5sYXN0LCAtMV0sIFtJdGVtLmRlc2NyaXB0aW9uLCAnTnVtYmVyIG9mIG9wZW4gU1FMIGNvbm5lY3Rpb25zJ10pO1xyXG4gICAgY29uc3QgaW50ZXJuYWxDb25uZWN0aW9ucyAgICAgICAgICAgICA9IGluZm9JdGVtKFtJdGVtLmtwaSwgJ0ludGVybmFsIENvbm5lY3Rpb25zJyAgICAgICBdLCBbSXRlbS55U2NhbGUsIDAsIF0sIFtJdGVtLnlTY2FsZUdyb3VwLCBTY2FsZUdyb3VwLkNvbm4gICBdLCBbSXRlbS51bml0LCBVbml0LkVtcHR5ICAgICAgXSwgW0l0ZW0ubWF4LCAtMV0sIFtJdGVtLmF2ZXJhZ2UsIC0xXSwgW0l0ZW0uc3VtLCAtMV0sIFtJdGVtLmxhc3QsIC0xXSwgW0l0ZW0uZGVzY3JpcHRpb24sICdOdW1iZXIgb2Ygb3BlbiBTUUwgaW50ZXJuYWwgY29ubmVjdGlvbnMnXSk7XHJcbiAgICBjb25zdCBleHRlcm5hbENvbm5lY3Rpb25zICAgICAgICAgICAgID0gaW5mb0l0ZW0oW0l0ZW0ua3BpLCAnRXh0ZXJuYWwgQ29ubmVjdGlvbnMnICAgICAgIF0sIFtJdGVtLnlTY2FsZSwgMCwgXSwgW0l0ZW0ueVNjYWxlR3JvdXAsIFNjYWxlR3JvdXAuQ29ubiAgIF0sIFtJdGVtLnVuaXQsIFVuaXQuRW1wdHkgICAgICBdLCBbSXRlbS5tYXgsIC0xXSwgW0l0ZW0uYXZlcmFnZSwgLTFdLCBbSXRlbS5zdW0sIC0xXSwgW0l0ZW0ubGFzdCwgLTFdLCBbSXRlbS5kZXNjcmlwdGlvbiwgJ051bWJlciBvZiBvcGVuIFNRTCBleHRlcm5hbCBjb25uZWN0aW9ucyddKTtcclxuICAgIGNvbnN0IGlkbGVDb25uZWN0aW9ucyAgICAgICAgICAgICAgICAgPSBpbmZvSXRlbShbSXRlbS5rcGksICdJZGxlIENvbm5lY3Rpb25zJyAgICAgICAgICAgXSwgW0l0ZW0ueVNjYWxlLCAwLCBdLCBbSXRlbS55U2NhbGVHcm91cCwgU2NhbGVHcm91cC5Db25uICAgXSwgW0l0ZW0udW5pdCwgVW5pdC5FbXB0eSAgICAgIF0sIFtJdGVtLm1heCwgLTFdLCBbSXRlbS5hdmVyYWdlLCAtMV0sIFtJdGVtLnN1bSwgLTFdLCBbSXRlbS5sYXN0LCAtMV0sIFtJdGVtLmRlc2NyaXB0aW9uLCAnTnVtYmVyIG9mIG9wZW4gU1FMIGlkbGUgY29ubmVjdGlvbnMnXSk7XHJcbiAgICBjb25zdCBzcWxUcmFuc2FjdGlvbnMgICAgICAgICAgICAgICAgID0gaW5mb0l0ZW0oW0l0ZW0ua3BpLCAnT3BlbiBUcmFuc2FjdGlvbnMnICAgICAgICAgIF0sIFtJdGVtLnlTY2FsZSwgMCwgXSwgW0l0ZW0ueVNjYWxlR3JvdXAsIFNjYWxlR3JvdXAuVHJhbnMgIF0sIFtJdGVtLnVuaXQsIFVuaXQuRW1wdHkgICAgICBdLCBbSXRlbS5tYXgsIC0xXSwgW0l0ZW0uYXZlcmFnZSwgLTFdLCBbSXRlbS5zdW0sIC0xXSwgW0l0ZW0ubGFzdCwgLTFdLCBbSXRlbS5kZXNjcmlwdGlvbiwgJ051bWJlciBvZiBvcGVuIFNRTCB0cmFuc2FjdGlvbnMnXSk7XHJcbiAgICBjb25zdCBpbnRlcm5hbFRyYW5zYWN0aW9ucyAgICAgICAgICAgID0gaW5mb0l0ZW0oW0l0ZW0ua3BpLCAnSW50ZXJuYWwgVHJhbnNhY3Rpb25zJyAgICAgIF0sIFtJdGVtLnlTY2FsZSwgMCwgXSwgW0l0ZW0ueVNjYWxlR3JvdXAsIFNjYWxlR3JvdXAuVHJhbnMgIF0sIFtJdGVtLnVuaXQsIFVuaXQuRW1wdHkgICAgICBdLCBbSXRlbS5tYXgsIC0xXSwgW0l0ZW0uYXZlcmFnZSwgLTFdLCBbSXRlbS5zdW0sIC0xXSwgW0l0ZW0ubGFzdCwgLTFdLCBbSXRlbS5kZXNjcmlwdGlvbiwgJ051bWJlciBvZiBpbnRlcm5hbCB0cmFuc2FjdGlvbnMnXSk7XHJcbiAgICBjb25zdCBleHRlcm5hbFRyYW5zYWN0aW9ucyAgICAgICAgICAgID0gaW5mb0l0ZW0oW0l0ZW0ua3BpLCAnRXh0ZXJuYWwgVHJhbnNhY3Rpb25zJyAgICAgIF0sIFtJdGVtLnlTY2FsZSwgMCwgXSwgW0l0ZW0ueVNjYWxlR3JvdXAsIFNjYWxlR3JvdXAuVHJhbnMgIF0sIFtJdGVtLnVuaXQsIFVuaXQuRW1wdHkgICAgICBdLCBbSXRlbS5tYXgsIC0xXSwgW0l0ZW0uYXZlcmFnZSwgLTFdLCBbSXRlbS5zdW0sIC0xXSwgW0l0ZW0ubGFzdCwgLTFdLCBbSXRlbS5kZXNjcmlwdGlvbiwgJ051bWJlciBvZiBleHRlcm5hbCB0cmFuc2FjdGlvbnMnXSk7XHJcbiAgICBjb25zdCB1c2VyVHJhbnNhY3Rpb25zICAgICAgICAgICAgICAgID0gaW5mb0l0ZW0oW0l0ZW0ua3BpLCAnVXNlciBUcmFuc2FjdGlvbnMnICAgICAgICAgIF0sIFtJdGVtLnlTY2FsZSwgMCwgXSwgW0l0ZW0ueVNjYWxlR3JvdXAsIFNjYWxlR3JvdXAuVHJhbnMgIF0sIFtJdGVtLnVuaXQsIFVuaXQuRW1wdHkgICAgICBdLCBbSXRlbS5tYXgsIC0xXSwgW0l0ZW0uYXZlcmFnZSwgLTFdLCBbSXRlbS5zdW0sIC0xXSwgW0l0ZW0ubGFzdCwgLTFdLCBbSXRlbS5kZXNjcmlwdGlvbiwgJ051bWJlciBvZiB1c2VyIHRyYW5zYWN0aW9ucyddKTtcclxuICAgIGNvbnN0IHNxbEJsb2NrZWRUcmFucyAgICAgICAgICAgICAgICAgPSBpbmZvSXRlbShbSXRlbS5rcGksICdCbG9ja2VkIFRyYW5zYWN0aW9ucycgICAgICAgXSwgW0l0ZW0ueVNjYWxlLCAwLCBdLCBbSXRlbS55U2NhbGVHcm91cCwgU2NhbGVHcm91cC5Vbmtub3duXSwgW0l0ZW0udW5pdCwgVW5pdC5FbXB0eSAgICAgIF0sIFtJdGVtLm1heCwgLTFdLCBbSXRlbS5hdmVyYWdlLCAtMV0sIFtJdGVtLnN1bSwgLTFdLCBbSXRlbS5sYXN0LCAtMV0sIFtJdGVtLmRlc2NyaXB0aW9uLCAnTnVtYmVyIG9mIGJsb2NrZWQgU1FMIHRyYW5zYWN0aW9ucyddKTtcclxuICAgIGNvbnN0IHNxbFN0YXRlbWVudHMgICAgICAgICAgICAgICAgICAgPSBpbmZvSXRlbShbSXRlbS5rcGksICdTdGF0ZW1lbnRzJyAgICAgICAgICAgICAgICAgXSwgW0l0ZW0ueVNjYWxlLCAwLCBdLCBbSXRlbS55U2NhbGVHcm91cCwgU2NhbGVHcm91cC5TdG10ICAgXSwgW0l0ZW0udW5pdCwgVW5pdC5TdG10UGVyU2VjIF0sIFtJdGVtLm1heCwgLTFdLCBbSXRlbS5hdmVyYWdlLCAtMV0sIFtJdGVtLnN1bSwgLTFdLCBbSXRlbS5sYXN0LCAtMV0sIFtJdGVtLmRlc2NyaXB0aW9uLCAnTnVtYmVyIG9mIGZpbmlzaGVkIFNRTCBzdGF0ZW1lbnRzJ10pO1xyXG4gICAgY29uc3QgY2lkUmFuZ2UgICAgICAgICAgICAgICAgICAgICAgICA9IGluZm9JdGVtKFtJdGVtLmtwaSwgJ0FjdGl2ZSBDb21taXQgSUQgUmFuZ2UnICAgICBdLCBbSXRlbS55U2NhbGUsIDAsIF0sIFtJdGVtLnlTY2FsZUdyb3VwLCBTY2FsZUdyb3VwLlVua25vd25dLCBbSXRlbS51bml0LCBVbml0LkVtcHR5ICAgICAgXSwgW0l0ZW0ubWF4LCAtMV0sIFtJdGVtLmF2ZXJhZ2UsIC0xXSwgW0l0ZW0uc3VtLCAtMV0sIFtJdGVtLmxhc3QsIC0xXSwgW0l0ZW0uZGVzY3JpcHRpb24sICdSYW5nZSBiZXR3ZWVuIG5ld2VzdCBhbmQgb2xkZXN0IGFjdGl2ZSBjb21taXQgSUQnXSk7XHJcbiAgICBjb25zdCB0aWRSYW5nZSAgICAgICAgICAgICAgICAgICAgICAgID0gaW5mb0l0ZW0oW0l0ZW0ua3BpLCAnQWN0aXZlIFRyYW5zYWN0aW9uIElEIFJhbmdlJ10sIFtJdGVtLnlTY2FsZSwgMCwgXSwgW0l0ZW0ueVNjYWxlR3JvdXAsIFNjYWxlR3JvdXAuVW5rbm93bl0sIFtJdGVtLnVuaXQsIFVuaXQuRW1wdHkgICAgICBdLCBbSXRlbS5tYXgsIC0xXSwgW0l0ZW0uYXZlcmFnZSwgLTFdLCBbSXRlbS5zdW0sIC0xXSwgW0l0ZW0ubGFzdCwgLTFdLCBbSXRlbS5kZXNjcmlwdGlvbiwgJ1JhbmdlIGJldHdlZW4gbmV3ZXN0IGFuZCBvbGRlc3QgYWN0aXZlIHRyYW5zYWN0aW9uIElEJ10pO1xyXG4gICAgY29uc3QgcGVuZGluZ1JlcXVlc3RDb3VudCAgICAgICAgICAgICA9IGluZm9JdGVtKFtJdGVtLmtwaSwgJ1BlbmRpbmcgUmVxdWVzdCBDb3VudCcgICAgICBdLCBbSXRlbS55U2NhbGUsIDAsIF0sIFtJdGVtLnlTY2FsZUdyb3VwLCBTY2FsZUdyb3VwLlVua25vd25dLCBbSXRlbS51bml0LCBVbml0LkVtcHR5ICAgICAgXSwgW0l0ZW0ubWF4LCAtMV0sIFtJdGVtLmF2ZXJhZ2UsIC0xXSwgW0l0ZW0uc3VtLCAtMV0sIFtJdGVtLmxhc3QsIC0xXSwgW0l0ZW0uZGVzY3JpcHRpb24sICdOdW1iZXIgb2YgcGVuZGluZyBzZXNzaW9uIHJlcXVlc3RzJ10pO1xyXG4gICAgY29uc3QgbXZjY051bSAgICAgICAgICAgICAgICAgICAgICAgICA9IGluZm9JdGVtKFtJdGVtLmtwaSwgJ0FjdGl2ZSBWZXJzaW9ucycgICAgICAgICAgICBdLCBbSXRlbS55U2NhbGUsIDAsIF0sIFtJdGVtLnlTY2FsZUdyb3VwLCBTY2FsZUdyb3VwLlVua25vd25dLCBbSXRlbS51bml0LCBVbml0LkVtcHR5ICAgICAgXSwgW0l0ZW0ubWF4LCAtMV0sIFtJdGVtLmF2ZXJhZ2UsIC0xXSwgW0l0ZW0uc3VtLCAtMV0sIFtJdGVtLmxhc3QsIC0xXSwgW0l0ZW0uZGVzY3JpcHRpb24sICdOdW1iZXIgb2YgYWN0aXZlIE1WQ0MgdmVyc2lvbnMnXSk7XHJcbiAgICBjb25zdCBhY3F1aXJlZFJlY29yZExvY2tzICAgICAgICAgICAgID0gaW5mb0l0ZW0oW0l0ZW0ua3BpLCAnQWNxdWlyZWQgUmVjb3JkIExvY2tzJyAgICAgIF0sIFtJdGVtLnlTY2FsZSwgMCwgXSwgW0l0ZW0ueVNjYWxlR3JvdXAsIFNjYWxlR3JvdXAuVW5rbm93bl0sIFtJdGVtLnVuaXQsIFVuaXQuRW1wdHkgICAgICBdLCBbSXRlbS5tYXgsIC0xXSwgW0l0ZW0uYXZlcmFnZSwgLTFdLCBbSXRlbS5zdW0sIC0xXSwgW0l0ZW0ubGFzdCwgLTFdLCBbSXRlbS5kZXNjcmlwdGlvbiwgJ051bWJlciBvZiBhY3F1aXJlZCByZWNvcmQgbG9ja3MnXSk7XHJcbiAgICBjb25zdCBzZWFyY2hDb3VudCAgICAgICAgICAgICAgICAgICAgID0gaW5mb0l0ZW0oW0l0ZW0ua3BpLCAnUmVhZCBSZXF1ZXN0cycgICAgICAgICAgICAgIF0sIFtJdGVtLnlTY2FsZSwgMCwgXSwgW0l0ZW0ueVNjYWxlR3JvdXAsIFNjYWxlR3JvdXAuUmVxICAgIF0sIFtJdGVtLnVuaXQsIFVuaXQuUmVxUGVyU2VjICBdLCBbSXRlbS5tYXgsIC0xXSwgW0l0ZW0uYXZlcmFnZSwgLTFdLCBbSXRlbS5zdW0sIC0xXSwgW0l0ZW0ubGFzdCwgLTFdLCBbSXRlbS5kZXNjcmlwdGlvbiwgJ051bWJlciBvZiByZWFkIHJlcXVlc3RzIChzZWxlY3QpJ10pO1xyXG4gICAgY29uc3QgaW5kZXhpbmdDb3VudCAgICAgICAgICAgICAgICAgICA9IGluZm9JdGVtKFtJdGVtLmtwaSwgJ1dyaXRlIFJlcXVlc3RzJyAgICAgICAgICAgICBdLCBbSXRlbS55U2NhbGUsIDAsIF0sIFtJdGVtLnlTY2FsZUdyb3VwLCBTY2FsZUdyb3VwLlJlcSAgICBdLCBbSXRlbS51bml0LCBVbml0LlJlcVBlclNlYyAgXSwgW0l0ZW0ubWF4LCAtMV0sIFtJdGVtLmF2ZXJhZ2UsIC0xXSwgW0l0ZW0uc3VtLCAtMV0sIFtJdGVtLmxhc3QsIC0xXSwgW0l0ZW0uZGVzY3JpcHRpb24sICdOdW1iZXIgb2Ygd3JpdGUgcmVxdWVzdHMgKGluc2VydCx1cGRhdGUsZGVsZXRlKSddKTtcclxuICAgIGNvbnN0IG1lcmdlQ291bnQgICAgICAgICAgICAgICAgICAgICAgPSBpbmZvSXRlbShbSXRlbS5rcGksICdNZXJnZSBSZXF1ZXN0cycgICAgICAgICAgICAgXSwgW0l0ZW0ueVNjYWxlLCAwLCBdLCBbSXRlbS55U2NhbGVHcm91cCwgU2NhbGVHcm91cC5SZXEgICAgXSwgW0l0ZW0udW5pdCwgVW5pdC5SZXFQZXJTZWMgIF0sIFtJdGVtLm1heCwgLTFdLCBbSXRlbS5hdmVyYWdlLCAtMV0sIFtJdGVtLnN1bSwgLTFdLCBbSXRlbS5sYXN0LCAtMV0sIFtJdGVtLmRlc2NyaXB0aW9uLCAnTnVtYmVyIG9mIG1lcmdlIHJlcXVlc3RzJ10pO1xyXG4gICAgY29uc3QgdW5sb2FkQ291bnQgICAgICAgICAgICAgICAgICAgICA9IGluZm9JdGVtKFtJdGVtLmtwaSwgJ0NvbHVtbiBVbmxvYWRzJyAgICAgICAgICAgICBdLCBbSXRlbS55U2NhbGUsIDAsIF0sIFtJdGVtLnlTY2FsZUdyb3VwLCBTY2FsZUdyb3VwLlJlcSAgICBdLCBbSXRlbS51bml0LCBVbml0LlJlcVBlclNlYyAgXSwgW0l0ZW0ubWF4LCAtMV0sIFtJdGVtLmF2ZXJhZ2UsIC0xXSwgW0l0ZW0uc3VtLCAtMV0sIFtJdGVtLmxhc3QsIC0xXSwgW0l0ZW0uZGVzY3JpcHRpb24sICdOdW1iZXIgb2YgY29sdW1uIHVubG9hZHMnXSk7XHJcbiAgICBjb25zdCBpbmRleHNlcnZlclRocmVhZHMgICAgICAgICAgICAgID0gaW5mb0l0ZW0oW0l0ZW0ua3BpLCAnQWN0aXZlIFRocmVhZHMnICAgICAgICAgICAgIF0sIFtJdGVtLnlTY2FsZSwgMCwgXSwgW0l0ZW0ueVNjYWxlR3JvdXAsIFNjYWxlR3JvdXAuVW5rbm93bl0sIFtJdGVtLnVuaXQsIFVuaXQuRW1wdHkgICAgICBdLCBbSXRlbS5tYXgsIC0xXSwgW0l0ZW0uYXZlcmFnZSwgLTFdLCBbSXRlbS5zdW0sIC0xXSwgW0l0ZW0ubGFzdCwgLTFdLCBbSXRlbS5kZXNjcmlwdGlvbiwgJ051bWJlciBvZiBhY3RpdmUgdGhyZWFkcyddKTtcclxuICAgIGNvbnN0IHdhaXRpbmdUaHJlYWRzICAgICAgICAgICAgICAgICAgPSBpbmZvSXRlbShbSXRlbS5rcGksICdXYWl0aW5nIFRocmVhZHMnICAgICAgICAgICAgXSwgW0l0ZW0ueVNjYWxlLCAwLCBdLCBbSXRlbS55U2NhbGVHcm91cCwgU2NhbGVHcm91cC5Vbmtub3duXSwgW0l0ZW0udW5pdCwgVW5pdC5FbXB0eSAgICAgIF0sIFtJdGVtLm1heCwgLTFdLCBbSXRlbS5hdmVyYWdlLCAtMV0sIFtJdGVtLnN1bSwgLTFdLCBbSXRlbS5sYXN0LCAtMV0sIFtJdGVtLmRlc2NyaXB0aW9uLCAnTnVtYmVyIG9mIHdhaXRpbmcgdGhyZWFkcyddKTtcclxuICAgIGNvbnN0IHRvdGFsVGhyZWFkcyAgICAgICAgICAgICAgICAgICAgPSBpbmZvSXRlbShbSXRlbS5rcGksICdUb3RhbCBUaHJlYWRzJyAgICAgICAgICAgICAgXSwgW0l0ZW0ueVNjYWxlLCAwLCBdLCBbSXRlbS55U2NhbGVHcm91cCwgU2NhbGVHcm91cC5Vbmtub3duXSwgW0l0ZW0udW5pdCwgVW5pdC5FbXB0eSAgICAgIF0sIFtJdGVtLm1heCwgLTFdLCBbSXRlbS5hdmVyYWdlLCAtMV0sIFtJdGVtLnN1bSwgLTFdLCBbSXRlbS5sYXN0LCAtMV0sIFtJdGVtLmRlc2NyaXB0aW9uLCAnVG90YWwgbnVtYmVyIG9mIHRocmVhZHMnXSk7XHJcbiAgICBjb25zdCBhY3RpdmVTcWxFeGVjdXRvcnMgICAgICAgICAgICAgID0gaW5mb0l0ZW0oW0l0ZW0ua3BpLCAnQWN0aXZlIFNxbEV4ZWN1dG9ycycgICAgICAgIF0sIFtJdGVtLnlTY2FsZSwgMCwgXSwgW0l0ZW0ueVNjYWxlR3JvdXAsIFNjYWxlR3JvdXAuVW5rbm93bl0sIFtJdGVtLnVuaXQsIFVuaXQuRW1wdHkgICAgICBdLCBbSXRlbS5tYXgsIC0xXSwgW0l0ZW0uYXZlcmFnZSwgLTFdLCBbSXRlbS5zdW0sIC0xXSwgW0l0ZW0ubGFzdCwgLTFdLCBbSXRlbS5kZXNjcmlwdGlvbiwgJ051bWJlciBvZiBhY3RpdmUgU3FsRXhlY3V0b3JzJ10pO1xyXG4gICAgY29uc3Qgd2FpdGluZ1NxbEV4ZWN1dG9ycyAgICAgICAgICAgICA9IGluZm9JdGVtKFtJdGVtLmtwaSwgJ1dhaXRpbmcgU3FsRXhlY3V0b3JzJyAgICAgICBdLCBbSXRlbS55U2NhbGUsIDAsIF0sIFtJdGVtLnlTY2FsZUdyb3VwLCBTY2FsZUdyb3VwLlVua25vd25dLCBbSXRlbS51bml0LCBVbml0LkVtcHR5ICAgICAgXSwgW0l0ZW0ubWF4LCAtMV0sIFtJdGVtLmF2ZXJhZ2UsIC0xXSwgW0l0ZW0uc3VtLCAtMV0sIFtJdGVtLmxhc3QsIC0xXSwgW0l0ZW0uZGVzY3JpcHRpb24sICdOdW1iZXIgb2Ygd2FpdGluZyBTcWxFeGVjdXRvcnMnXSk7XHJcbiAgICBjb25zdCB0b3RhbFNxbEV4ZWN1dG9ycyAgICAgICAgICAgICAgID0gaW5mb0l0ZW0oW0l0ZW0ua3BpLCAnVG90YWwgU3FsRXhlY3V0b3JzJyAgICAgICAgIF0sIFtJdGVtLnlTY2FsZSwgMCwgXSwgW0l0ZW0ueVNjYWxlR3JvdXAsIFNjYWxlR3JvdXAuVW5rbm93bl0sIFtJdGVtLnVuaXQsIFVuaXQuRW1wdHkgICAgICBdLCBbSXRlbS5tYXgsIC0xXSwgW0l0ZW0uYXZlcmFnZSwgLTFdLCBbSXRlbS5zdW0sIC0xXSwgW0l0ZW0ubGFzdCwgLTFdLCBbSXRlbS5kZXNjcmlwdGlvbiwgJ1RvdGFsIG51bWJlciBvZiBTcWxFeGVjdXRvcnMnXSk7XHJcbiAgICBjb25zdCBkYXRhV3JpdGVTaXplICAgICAgICAgICAgICAgICAgID0gaW5mb0l0ZW0oW0l0ZW0ua3BpLCAnRGF0YSBXcml0ZSBTaXplJyAgICAgICAgICAgIF0sIFtJdGVtLnlTY2FsZSwgMCwgXSwgW0l0ZW0ueVNjYWxlR3JvdXAsIFNjYWxlR3JvdXAuV1JTaXplIF0sIFtJdGVtLnVuaXQsIFVuaXQuTUJQZXJTZWMgICBdLCBbSXRlbS5tYXgsIC0xXSwgW0l0ZW0uYXZlcmFnZSwgLTFdLCBbSXRlbS5zdW0sIC0xXSwgW0l0ZW0ubGFzdCwgLTFdLCBbSXRlbS5kZXNjcmlwdGlvbiwgJ0J5dGVzIHdyaXR0ZW4gdG8gZGF0YSBhcmVhJ10pO1xyXG4gICAgY29uc3QgZGF0YVdyaXRlVGltZSAgICAgICAgICAgICAgICAgICA9IGluZm9JdGVtKFtJdGVtLmtwaSwgJ0RhdGEgV3JpdGUgVGltZScgICAgICAgICAgICBdLCBbSXRlbS55U2NhbGUsIDAsIF0sIFtJdGVtLnlTY2FsZUdyb3VwLCBTY2FsZUdyb3VwLldSVGltZSBdLCBbSXRlbS51bml0LCBVbml0LlNlY1BlclNlYyAgXSwgW0l0ZW0ubWF4LCAtMV0sIFtJdGVtLmF2ZXJhZ2UsIC0xXSwgW0l0ZW0uc3VtLCAtMV0sIFtJdGVtLmxhc3QsIC0xXSwgW0l0ZW0uZGVzY3JpcHRpb24sICdUaW1lIHVzZWQgZm9yIHdyaXRpbmcgdG8gZGF0YSBhcmVhJ10pO1xyXG4gICAgY29uc3QgbG9nV3JpdGVTaXplICAgICAgICAgICAgICAgICAgICA9IGluZm9JdGVtKFtJdGVtLmtwaSwgJ0xvZyBXcml0ZSBTaXplJyAgICAgICAgICAgICBdLCBbSXRlbS55U2NhbGUsIDAsIF0sIFtJdGVtLnlTY2FsZUdyb3VwLCBTY2FsZUdyb3VwLldSU2l6ZSBdLCBbSXRlbS51bml0LCBVbml0Lk1CUGVyU2VjICAgXSwgW0l0ZW0ubWF4LCAtMV0sIFtJdGVtLmF2ZXJhZ2UsIC0xXSwgW0l0ZW0uc3VtLCAtMV0sIFtJdGVtLmxhc3QsIC0xXSwgW0l0ZW0uZGVzY3JpcHRpb24sICdCeXRlcyB3cml0dGVuIHRvIGxvZyBhcmVhJ10pO1xyXG4gICAgY29uc3QgbG9nV3JpdGVUaW1lICAgICAgICAgICAgICAgICAgICA9IGluZm9JdGVtKFtJdGVtLmtwaSwgJ0xvZyBXcml0ZSBUaW1lJyAgICAgICAgICAgICBdLCBbSXRlbS55U2NhbGUsIDAsIF0sIFtJdGVtLnlTY2FsZUdyb3VwLCBTY2FsZUdyb3VwLldSVGltZSBdLCBbSXRlbS51bml0LCBVbml0LlNlY1BlclNlYyAgXSwgW0l0ZW0ubWF4LCAtMV0sIFtJdGVtLmF2ZXJhZ2UsIC0xXSwgW0l0ZW0uc3VtLCAtMV0sIFtJdGVtLmxhc3QsIC0xXSwgW0l0ZW0uZGVzY3JpcHRpb24sICdUaW1lIHVzZWQgZm9yIHdyaXRpbmcgdG8gbG9nIGFyZWEnXSk7XHJcbiAgICBjb25zdCBkYXRhUmVhZFNpemUgICAgICAgICAgICAgICAgICAgID0gaW5mb0l0ZW0oW0l0ZW0ua3BpLCAnRGF0YSBSZWFkIFNpemUnICAgICAgICAgICAgIF0sIFtJdGVtLnlTY2FsZSwgMCwgXSwgW0l0ZW0ueVNjYWxlR3JvdXAsIFNjYWxlR3JvdXAuV1JTaXplIF0sIFtJdGVtLnVuaXQsIFVuaXQuTUJQZXJTZWMgICBdLCBbSXRlbS5tYXgsIC0xXSwgW0l0ZW0uYXZlcmFnZSwgLTFdLCBbSXRlbS5zdW0sIC0xXSwgW0l0ZW0ubGFzdCwgLTFdLCBbSXRlbS5kZXNjcmlwdGlvbiwgJ0J5dGVzIHJlYWQgZnJvbSBkYXRhIGFyZWEnXSk7XHJcbiAgICBjb25zdCBkYXRhUmVhZFRpbWUgICAgICAgICAgICAgICAgICAgID0gaW5mb0l0ZW0oW0l0ZW0ua3BpLCAnRGF0YSBSZWFkIFRpbWUnICAgICAgICAgICAgIF0sIFtJdGVtLnlTY2FsZSwgMCwgXSwgW0l0ZW0ueVNjYWxlR3JvdXAsIFNjYWxlR3JvdXAuV1JUaW1lIF0sIFtJdGVtLnVuaXQsIFVuaXQuU2VjUGVyU2VjICBdLCBbSXRlbS5tYXgsIC0xXSwgW0l0ZW0uYXZlcmFnZSwgLTFdLCBbSXRlbS5zdW0sIC0xXSwgW0l0ZW0ubGFzdCwgLTFdLCBbSXRlbS5kZXNjcmlwdGlvbiwgJ1RpbWUgdXNlZCBmb3IgcmVhZGluZyBmcm9tIGRhdGEgYXJlYSddKTtcclxuICAgIGNvbnN0IGxvZ1JlYWRTaXplICAgICAgICAgICAgICAgICAgICAgPSBpbmZvSXRlbShbSXRlbS5rcGksICdMb2cgUmVhZCBTaXplJyAgICAgICAgICAgICAgXSwgW0l0ZW0ueVNjYWxlLCAwLCBdLCBbSXRlbS55U2NhbGVHcm91cCwgU2NhbGVHcm91cC5XUlNpemUgXSwgW0l0ZW0udW5pdCwgVW5pdC5NQlBlclNlYyAgIF0sIFtJdGVtLm1heCwgLTFdLCBbSXRlbS5hdmVyYWdlLCAtMV0sIFtJdGVtLnN1bSwgLTFdLCBbSXRlbS5sYXN0LCAtMV0sIFtJdGVtLmRlc2NyaXB0aW9uLCAnQnl0ZXMgcmVhZCBmcm9tIGxvZyBhcmVhJ10pO1xyXG4gICAgY29uc3QgbG9nUmVhZFRpbWUgICAgICAgICAgICAgICAgICAgICA9IGluZm9JdGVtKFtJdGVtLmtwaSwgJ0xvZyBSZWFkIFRpbWUnICAgICAgICAgICAgICBdLCBbSXRlbS55U2NhbGUsIDAsIF0sIFtJdGVtLnlTY2FsZUdyb3VwLCBTY2FsZUdyb3VwLldSVGltZSBdLCBbSXRlbS51bml0LCBVbml0LlNlY1BlclNlYyAgXSwgW0l0ZW0ubWF4LCAtMV0sIFtJdGVtLmF2ZXJhZ2UsIC0xXSwgW0l0ZW0uc3VtLCAtMV0sIFtJdGVtLmxhc3QsIC0xXSwgW0l0ZW0uZGVzY3JpcHRpb24sICdUaW1lIHVzZWQgZm9yIHJlYWRpbmcgZnJvbSBsb2cgYXJlYSddKTtcclxuICAgIGNvbnN0IGRhdGFCYWNrdXBXcml0ZVNpemUgICAgICAgICAgICAgPSBpbmZvSXRlbShbSXRlbS5rcGksICdEYXRhIEJhY2t1cCBXcml0ZSBTaXplJyAgICAgXSwgW0l0ZW0ueVNjYWxlLCAwLCBdLCBbSXRlbS55U2NhbGVHcm91cCwgU2NhbGVHcm91cC5XUlNpemUgXSwgW0l0ZW0udW5pdCwgVW5pdC5NQlBlclNlYyAgIF0sIFtJdGVtLm1heCwgLTFdLCBbSXRlbS5hdmVyYWdlLCAtMV0sIFtJdGVtLnN1bSwgLTFdLCBbSXRlbS5sYXN0LCAtMV0sIFtJdGVtLmRlc2NyaXB0aW9uLCAnQnl0ZXMgd3JpdHRlbiB0byBkYXRhIGJhY2t1cCddKTtcclxuICAgIGNvbnN0IGRhdGFCYWNrdXBXcml0ZVRpbWUgICAgICAgICAgICAgPSBpbmZvSXRlbShbSXRlbS5rcGksICdEYXRhIEJhY2t1cCBXcml0ZSBUaW1lJyAgICAgXSwgW0l0ZW0ueVNjYWxlLCAwLCBdLCBbSXRlbS55U2NhbGVHcm91cCwgU2NhbGVHcm91cC5XUlRpbWUgXSwgW0l0ZW0udW5pdCwgVW5pdC5TZWNQZXJTZWMgIF0sIFtJdGVtLm1heCwgLTFdLCBbSXRlbS5hdmVyYWdlLCAtMV0sIFtJdGVtLnN1bSwgLTFdLCBbSXRlbS5sYXN0LCAtMV0sIFtJdGVtLmRlc2NyaXB0aW9uLCAnVGltZSB1c2VkIGZvciB3cml0aW5nIHRvIGRhdGEgYmFja3VwJ10pO1xyXG4gICAgY29uc3QgbG9nQmFja3VwV3JpdGVTaXplICAgICAgICAgICAgICA9IGluZm9JdGVtKFtJdGVtLmtwaSwgJ0xvZyBCYWNrdXAgV3JpdGUgU2l6ZScgICAgICBdLCBbSXRlbS55U2NhbGUsIDAsIF0sIFtJdGVtLnlTY2FsZUdyb3VwLCBTY2FsZUdyb3VwLldSU2l6ZSBdLCBbSXRlbS51bml0LCBVbml0Lk1CUGVyU2VjICAgXSwgW0l0ZW0ubWF4LCAtMV0sIFtJdGVtLmF2ZXJhZ2UsIC0xXSwgW0l0ZW0uc3VtLCAtMV0sIFtJdGVtLmxhc3QsIC0xXSwgW0l0ZW0uZGVzY3JpcHRpb24sICdCeXRlcyB3cml0dGVuIHRvIGxvZyBiYWNrdXAnXSk7XHJcbiAgICBjb25zdCBsb2dCYWNrdXBXcml0ZVRpbWUgICAgICAgICAgICAgID0gaW5mb0l0ZW0oW0l0ZW0ua3BpLCAnTG9nIEJhY2t1cCBXcml0ZSBUaW1lJyAgICAgIF0sIFtJdGVtLnlTY2FsZSwgMCwgXSwgW0l0ZW0ueVNjYWxlR3JvdXAsIFNjYWxlR3JvdXAuV1JUaW1lIF0sIFtJdGVtLnVuaXQsIFVuaXQuU2VjUGVyU2VjICBdLCBbSXRlbS5tYXgsIC0xXSwgW0l0ZW0uYXZlcmFnZSwgLTFdLCBbSXRlbS5zdW0sIC0xXSwgW0l0ZW0ubGFzdCwgLTFdLCBbSXRlbS5kZXNjcmlwdGlvbiwgJ1RpbWUgdXNlZCBmb3Igd3JpdGluZyB0byBsb2cgYmFja3VwJ10pO1xyXG4gICAgY29uc3QgbXV0ZXhDb2xsaXNpb25Db3VudCAgICAgICAgICAgICA9IGluZm9JdGVtKFtJdGVtLmtwaSwgJ011dGV4IENvbGxpc2lvbnMnICAgICAgICAgICBdLCBbSXRlbS55U2NhbGUsIDAsIF0sIFtJdGVtLnlTY2FsZUdyb3VwLCBTY2FsZUdyb3VwLlVua25vd25dLCBbSXRlbS51bml0LCBVbml0LkNvbFBlclNlYyAgXSwgW0l0ZW0ubWF4LCAtMV0sIFtJdGVtLmF2ZXJhZ2UsIC0xXSwgW0l0ZW0uc3VtLCAtMV0sIFtJdGVtLmxhc3QsIC0xXSwgW0l0ZW0uZGVzY3JpcHRpb24sICdOdW1iZXIgb2YgY29sbGlzaW9ucyBvbiBtdXRleGVzJ10pO1xyXG4gICAgY29uc3QgcmVhZFdyaXRlTG9ja0NvbGxpc2lvbkNvdW50ICAgICA9IGluZm9JdGVtKFtJdGVtLmtwaSwgJ1JlYWQvV3JpdGUgTG9jayBDb2xsaXNpb25zJyBdLCBbSXRlbS55U2NhbGUsIDAsIF0sIFtJdGVtLnlTY2FsZUdyb3VwLCBTY2FsZUdyb3VwLlVua25vd25dLCBbSXRlbS51bml0LCBVbml0LkNvbFBlclNlYyAgXSwgW0l0ZW0ubWF4LCAtMV0sIFtJdGVtLmF2ZXJhZ2UsIC0xXSwgW0l0ZW0uc3VtLCAtMV0sIFtJdGVtLmxhc3QsIC0xXSwgW0l0ZW0uZGVzY3JpcHRpb24sICdOdW1iZXIgb2YgY29sbGlzaW9ucyBvbiByZWFkL3dyaXRlIGxvY2tzJ10pO1xyXG4gICAgY29uc3QgYWRtaXNzaW5Db250cm9sQWRtaXRDb3VudCAgICAgICA9IGluZm9JdGVtKFtJdGVtLmtwaSwgJ0FkbWl0dGVkIFJlcXVlc3RzJyAgICAgICAgICBdLCBbSXRlbS55U2NhbGUsIDAsIF0sIFtJdGVtLnlTY2FsZUdyb3VwLCBTY2FsZUdyb3VwLlVua25vd25dLCBbSXRlbS51bml0LCBVbml0LlJlcVBlclNlYyAgXSwgW0l0ZW0ubWF4LCAtMV0sIFtJdGVtLmF2ZXJhZ2UsIC0xXSwgW0l0ZW0uc3VtLCAtMV0sIFtJdGVtLmxhc3QsIC0xXSwgW0l0ZW0uZGVzY3JpcHRpb24sICdOdW1iZXIgb2Ygc2Vzc2lvbiByZXF1ZXN0cyBhZG1pdHRlZCBieSBhZG1pc3Npb24gY29udHJvbCddKTtcclxuICAgIGNvbnN0IGFkbWlzc2lvbkNvbnRyb2xSZWplY3RDb3VudCAgICAgPSBpbmZvSXRlbShbSXRlbS5rcGksICdSZWplY3RlZCBSZXF1ZXN0cycgICAgICAgICAgXSwgW0l0ZW0ueVNjYWxlLCAwLCBdLCBbSXRlbS55U2NhbGVHcm91cCwgU2NhbGVHcm91cC5Vbmtub3duXSwgW0l0ZW0udW5pdCwgVW5pdC5SZXFQZXJTZWMgIF0sIFtJdGVtLm1heCwgLTFdLCBbSXRlbS5hdmVyYWdlLCAtMV0sIFtJdGVtLnN1bSwgLTFdLCBbSXRlbS5sYXN0LCAtMV0sIFtJdGVtLmRlc2NyaXB0aW9uLCAnTnVtYmVyIG9mIHNlc3Npb24gcmVxdWVzdHMgcmVqZWN0ZWQgYnkgYWRtaXNzaW9uIGNvbnRyb2wnXSk7XHJcbiAgICBjb25zdCBhZG1pc3Npb25Db250cm9sV2FpdGluZ1JlcXVlc3RzID0gaW5mb0l0ZW0oW0l0ZW0ua3BpLCAnV2FpdGluZyBSZXF1ZXN0cycgICAgICAgICAgIF0sIFtJdGVtLnlTY2FsZSwgMCwgXSwgW0l0ZW0ueVNjYWxlR3JvdXAsIFNjYWxlR3JvdXAuVW5rbm93bl0sIFtJdGVtLnVuaXQsIFVuaXQuUmVxUGVyU2VjICBdLCBbSXRlbS5tYXgsIC0xXSwgW0l0ZW0uYXZlcmFnZSwgLTFdLCBbSXRlbS5zdW0sIC0xXSwgW0l0ZW0ubGFzdCwgLTFdLCBbSXRlbS5kZXNjcmlwdGlvbiwgJ051bWJlciBvZiBzZXNzaW9uIHJlcXVlc3RzIHdhaXRpbmcgaW4gYWRtaXNzaW9uIGNvbnRyb2wgcXVldWUnXSk7XHJcbiAgICBjb25zdCBhZG1pc3Npb25Db250cm9sV2FpdFRpbWUgICAgICAgID0gaW5mb0l0ZW0oW0l0ZW0ua3BpLCAnV2FpdCBUaW1lJyAgICAgICAgICAgICAgICAgIF0sIFtJdGVtLnlTY2FsZSwgMCwgXSwgW0l0ZW0ueVNjYWxlR3JvdXAsIFNjYWxlR3JvdXAuVW5rbm93bl0sIFtJdGVtLnVuaXQsIFVuaXQuU2VjUGVyU2VjICBdLCBbSXRlbS5tYXgsIC0xXSwgW0l0ZW0uYXZlcmFnZSwgLTFdLCBbSXRlbS5zdW0sIC0xXSwgW0l0ZW0ubGFzdCwgLTFdLCBbSXRlbS5kZXNjcmlwdGlvbiwgJ1RvdGFsIHdhaXQgdGltZSBvZiBzZXNzaW9uIHJlcXVlc3RzIHF1ZXVlZCBpbiBhZG1pc3Npb24gY29udHJvbCBxdWV1ZSddKTtcclxuICAgIC8vIGdlbmVyYXRlIEhvc3RcclxuICAgIGNvbnN0IGxvYWRIaXN0b3J5SW5mb0hvc3Q6IExvYWRIaXN0b3J5SW5mb0hvc3QgPSB7XHJcbiAgICAgIGNwdVVzZWQgICAgICAgICAgICAgICAgICAgICAgICAgOiBjcHVVc2VkICAgICAgICAgICAgLFxyXG4gICAgICBtZW1vcnlSZXNpZGVudCAgICAgICAgICAgICAgICAgIDogbWVtb3J5UmVzaWRlbnQgICAgICxcclxuICAgICAgbWVtb3J5VG90YWxSZXNpZGVudCAgICAgICAgICAgICA6IG1lbW9yeVRvdGFsUmVzaWRlbnQsXHJcbiAgICAgIG1lbW9yeVVzZWQgICAgICAgICAgICAgICAgICAgICAgOiBtZW1vcnlVc2VkICAgICAgICAgLFxyXG4gICAgICBtZW1vcnlMaW1pdCAgICAgICAgICAgICAgICAgICAgIDogbWVtb3J5TGltaXQgICAgICAgICxcclxuICAgICAgbWVtb3J5U2l6ZSAgICAgICAgICAgICAgICAgICAgICA6IG1lbW9yeVNpemUgICAgICAgICAsXHJcbiAgICAgIGRpc2tVc2VkICAgICAgICAgICAgICAgICAgICAgICAgOiBkaXNrVXNlZCAgICAgICAgICAgLFxyXG4gICAgICBkaXNrU2l6ZSAgICAgICAgICAgICAgICAgICAgICAgIDogZGlza1NpemUgICAgICAgICAgICxcclxuICAgICAgbmV0d29ya0luICAgICAgICAgICAgICAgICAgICAgICA6IG5ldHdvcmtJbiAgICAgICAgICAsXHJcbiAgICAgIG5ldHdvcmtPdXQgICAgICAgICAgICAgICAgICAgICAgOiBuZXR3b3JrT3V0ICAgICAgICAgLFxyXG4gICAgICBzd2FwSW4gICAgICAgICAgICAgICAgICAgICAgICAgIDogc3dhcEluICAgICAgICAgICAgICxcclxuICAgICAgc3dhcE91dCAgICAgICAgICAgICAgICAgICAgICAgICA6IHN3YXBPdXQgICAgICAgICAgICAsXHJcbiAgICB9O1xyXG4gICAgLy8gZ2VuZXJhdGUgSW5kZXggU2VydmVyXHJcbiAgICBjb25zdCBsb2FkSGlzdG9yeUluZm9JbmRleFNlcnZlcjogTG9hZEhpc3RvcnlJbmZvSW5kZXhTZXJ2ZXIgPSB7XHJcbiAgICAgIGluZGV4c2VydmVyQ3B1ICAgICAgICAgICAgICAgICAgOiBpbmRleHNlcnZlckNwdSAgICAgICxcclxuICAgICAgaW5kZXhzZXJ2ZXJDcHVTeXMgICAgICAgICAgICAgICA6IGluZGV4c2VydmVyQ3B1U3lzICAgLFxyXG4gICAgICBpbmRleHNlcnZlck1lbVVzZWQgICAgICAgICAgICAgIDogaW5kZXhzZXJ2ZXJNZW1Vc2VkICAsXHJcbiAgICAgIGluZGV4c2VydmVyTWVtTGltaXQgICAgICAgICAgICAgOiBpbmRleHNlcnZlck1lbUxpbWl0ICxcclxuICAgICAgaW5kZXhzZXJ2ZXJIYW5kbGVzICAgICAgICAgICAgICA6IGluZGV4c2VydmVySGFuZGxlcyAgLFxyXG4gICAgICBpbmRleHNlcnZlclBpbmd0aW1lICAgICAgICAgICAgIDogaW5kZXhzZXJ2ZXJQaW5ndGltZSAsXHJcbiAgICAgIGluZGV4c2VydmVyU3dhcEluICAgICAgICAgICAgICAgOiBpbmRleHNlcnZlclN3YXBJbiAgICxcclxuICAgIH07XHJcbiAgICAvLyBnZW5lcmF0ZSBTUUxcclxuICAgIGNvbnN0IGxvYWRIaXN0b3J5SW5mb1NRTDogTG9hZEhpc3RvcnlJbmZvU1FMID0ge1xyXG4gICAgICBzcWxDb25uZWN0aW9ucyAgICAgICAgICAgICAgICAgIDogc3FsQ29ubmVjdGlvbnMgICAgICAsXHJcbiAgICAgIGludGVybmFsQ29ubmVjdGlvbnMgICAgICAgICAgICAgOiBpbnRlcm5hbENvbm5lY3Rpb25zICxcclxuICAgICAgZXh0ZXJuYWxDb25uZWN0aW9ucyAgICAgICAgICAgICA6IGV4dGVybmFsQ29ubmVjdGlvbnMgLFxyXG4gICAgICBpZGxlQ29ubmVjdGlvbnMgICAgICAgICAgICAgICAgIDogaWRsZUNvbm5lY3Rpb25zICAgICAsXHJcbiAgICAgIHNxbFRyYW5zYWN0aW9ucyAgICAgICAgICAgICAgICAgOiBzcWxUcmFuc2FjdGlvbnMgICAgICxcclxuICAgICAgaW50ZXJuYWxUcmFuc2FjdGlvbnMgICAgICAgICAgICA6IGludGVybmFsVHJhbnNhY3Rpb25zLFxyXG4gICAgICBleHRlcm5hbFRyYW5zYWN0aW9ucyAgICAgICAgICAgIDogZXh0ZXJuYWxUcmFuc2FjdGlvbnMsXHJcbiAgICAgIHVzZXJUcmFuc2FjdGlvbnMgICAgICAgICAgICAgICAgOiB1c2VyVHJhbnNhY3Rpb25zICAgICxcclxuICAgICAgc3FsQmxvY2tlZFRyYW5zICAgICAgICAgICAgICAgICA6IHNxbEJsb2NrZWRUcmFucyAgICAgLFxyXG4gICAgICBzcWxTdGF0ZW1lbnRzICAgICAgICAgICAgICAgICAgIDogc3FsU3RhdGVtZW50cyAgICAgICAsXHJcbiAgICAgIGNpZFJhbmdlICAgICAgICAgICAgICAgICAgICAgICAgOiBjaWRSYW5nZSAgICAgICAgICAgICxcclxuICAgICAgdGlkUmFuZ2UgICAgICAgICAgICAgICAgICAgICAgICA6IHRpZFJhbmdlICAgICAgICAgICAgLFxyXG4gICAgICBwZW5kaW5nUmVxdWVzdENvdW50ICAgICAgICAgICAgIDogcGVuZGluZ1JlcXVlc3RDb3VudCAsXHJcbiAgICB9O1xyXG4gICAgLy8gZ2VuZXJhdGUgUm93IFN0b3JlXHJcbiAgICBjb25zdCBsb2FkSGlzdG9yeUluZm9Sb3dTdG9yZTogTG9hZEhpc3RvcnlJbmZvUm93U3RvcmUgPSB7XHJcbiAgICAgIG12Y2NOdW0gICAgICAgICAgICAgICAgICAgICAgICAgOiBtdmNjTnVtICAgICAgICAgICAgLFxyXG4gICAgICBhY3F1aXJlZFJlY29yZExvY2tzICAgICAgICAgICAgIDogYWNxdWlyZWRSZWNvcmRMb2NrcyxcclxuICAgIH07XHJcbiAgICAvLyBnZW5lcmF0ZSBDb2x1bW4gU3RvcmVcclxuICAgIGNvbnN0IGxvYWRIaXN0b3J5SW5mb0NvbHVtblN0b3JlOiBMb2FkSGlzdG9yeUluZm9Db2x1bW5TdG9yZSA9IHtcclxuICAgICAgc2VhcmNoQ291bnQgICAgICAgICAgICAgICAgICAgICA6IHNlYXJjaENvdW50ICAsXHJcbiAgICAgIGluZGV4aW5nQ291bnQgICAgICAgICAgICAgICAgICAgOiBpbmRleGluZ0NvdW50LFxyXG4gICAgICBtZXJnZUNvdW50ICAgICAgICAgICAgICAgICAgICAgIDogbWVyZ2VDb3VudCAgICxcclxuICAgICAgdW5sb2FkQ291bnQgICAgICAgICAgICAgICAgICAgICA6IHVubG9hZENvdW50ICAsXHJcbiAgICB9O1xyXG4gICAgLy8gZ2VuZXJhdGUgVGhyZWFkc1xyXG4gICAgY29uc3QgbG9hZEhpc3RvcnlJbmZvVGhyZWFkczogTG9hZEhpc3RvcnlJbmZvVGhyZWFkcyA9IHtcclxuICAgICAgaW5kZXhzZXJ2ZXJUaHJlYWRzICAgICAgICAgICAgICA6IGluZGV4c2VydmVyVGhyZWFkcyAsXHJcbiAgICAgIHdhaXRpbmdUaHJlYWRzICAgICAgICAgICAgICAgICAgOiB3YWl0aW5nVGhyZWFkcyAgICAgLFxyXG4gICAgICB0b3RhbFRocmVhZHMgICAgICAgICAgICAgICAgICAgIDogdG90YWxUaHJlYWRzICAgICAgICxcclxuICAgICAgYWN0aXZlU3FsRXhlY3V0b3JzICAgICAgICAgICAgICA6IGFjdGl2ZVNxbEV4ZWN1dG9ycyAsXHJcbiAgICAgIHdhaXRpbmdTcWxFeGVjdXRvcnMgICAgICAgICAgICAgOiB3YWl0aW5nU3FsRXhlY3V0b3JzLFxyXG4gICAgICB0b3RhbFNxbEV4ZWN1dG9ycyAgICAgICAgICAgICAgIDogdG90YWxTcWxFeGVjdXRvcnMgICxcclxuICAgIH07XHJcbiAgICAvLyBnZW5lcmF0ZSBQZXJzaXN0ZW5jZVxyXG4gICAgY29uc3QgbG9hZEhpc3RvcnlJbmZvUGVyc2lzdGVuY2U6IExvYWRIaXN0b3J5SW5mb1BlcnNpc3RlbmNlID0ge1xyXG4gICAgICBkYXRhV3JpdGVTaXplICAgICAgICAgICAgICAgICAgIDogZGF0YVdyaXRlU2l6ZSxcclxuICAgICAgZGF0YVdyaXRlVGltZSAgICAgICAgICAgICAgICAgICA6IGRhdGFXcml0ZVRpbWUsXHJcbiAgICAgIGxvZ1dyaXRlU2l6ZSAgICAgICAgICAgICAgICAgICAgOiBsb2dXcml0ZVNpemUgLFxyXG4gICAgICBsb2dXcml0ZVRpbWUgICAgICAgICAgICAgICAgICAgIDogbG9nV3JpdGVUaW1lICxcclxuXHJcbiAgICAgIGRhdGFSZWFkU2l6ZSAgICAgICAgICAgICAgICAgICAgOiBkYXRhUmVhZFNpemUgLFxyXG4gICAgICBkYXRhUmVhZFRpbWUgICAgICAgICAgICAgICAgICAgIDogZGF0YVJlYWRUaW1lICxcclxuICAgICAgbG9nUmVhZFNpemUgICAgICAgICAgICAgICAgICAgICA6IGxvZ1JlYWRTaXplICAsXHJcbiAgICAgIGxvZ1JlYWRUaW1lICAgICAgICAgICAgICAgICAgICAgOiBsb2dSZWFkVGltZSAgLFxyXG4gICAgfTtcclxuICAgIC8vIGdlbmVyYXRlIEJhY2t1cFxyXG4gICAgY29uc3QgbG9hZEhpc3RvcnlJbmZvQmFja3VwOiBMb2FkSGlzdG9yeUluZm9CYWNrdXAgPSB7XHJcbiAgICAgIGRhdGFCYWNrdXBXcml0ZVNpemUgICAgICAgICAgICAgOiBkYXRhQmFja3VwV3JpdGVTaXplLFxyXG4gICAgICBkYXRhQmFja3VwV3JpdGVUaW1lICAgICAgICAgICAgIDogZGF0YUJhY2t1cFdyaXRlVGltZSxcclxuICAgICAgbG9nQmFja3VwV3JpdGVTaXplICAgICAgICAgICAgICA6IGxvZ0JhY2t1cFdyaXRlU2l6ZSAsXHJcbiAgICAgIGxvZ0JhY2t1cFdyaXRlVGltZSAgICAgICAgICAgICAgOiBsb2dCYWNrdXBXcml0ZVRpbWUgLFxyXG4gICAgfTtcclxuICAgIC8vIGdlbmVyYXRlIFN5bmNocm9uaXphdGlvbiBQcmltaXRpdmVzXHJcbiAgICBjb25zdCBsb2FkSGlzdG9yeUluZm9TeW5jaHJvbml6YXRpb25QcmltaXRpdmVzOiBMb2FkSGlzdG9yeUluZm9TeW5jUHJpbWl0aXZlcyA9IHtcclxuICAgICAgbXV0ZXhDb2xsaXNpb25Db3VudCAgICAgICAgICAgICA6IG11dGV4Q29sbGlzaW9uQ291bnQgICAgICAgICxcclxuICAgICAgcmVhZFdyaXRlTG9ja0NvbGxpc2lvbkNvdW50ICAgICA6IHJlYWRXcml0ZUxvY2tDb2xsaXNpb25Db3VudCxcclxuICAgIH07XHJcbiAgICAvLyBTZXNzaW9uIEFkbWlzc2lvbiBDb250cm9sXHJcbiAgICBjb25zdCBsb2FkSGlzdG9yeUluZm9TZXNzaW9uQWRtaXNzaW9uQ29udHJvbDogTG9hZEhpc3RvcnlJbmZvU2Vzc2lvbkFkbWlzc2lvbkNvbnRyb2wgPSB7XHJcbiAgICAgIGFkbWlzc2luQ29udHJvbEFkbWl0Q291bnQgICAgICAgOiBhZG1pc3NpbkNvbnRyb2xBZG1pdENvdW50ICAgICAgLFxyXG4gICAgICBhZG1pc3Npb25Db250cm9sUmVqZWN0Q291bnQgICAgIDogYWRtaXNzaW9uQ29udHJvbFJlamVjdENvdW50ICAgICxcclxuICAgICAgYWRtaXNzaW9uQ29udHJvbFdhaXRpbmdSZXF1ZXN0cyA6IGFkbWlzc2lvbkNvbnRyb2xXYWl0aW5nUmVxdWVzdHMsXHJcbiAgICAgIGFkbWlzc2lvbkNvbnRyb2xXYWl0VGltZSAgICAgICAgOiBhZG1pc3Npb25Db250cm9sV2FpdFRpbWUgICAgICAgLFxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAnSG9zdCc6IGxvYWRIaXN0b3J5SW5mb0hvc3QsXHJcbiAgICAgICdJbmRleCBTZXJ2ZXInOiBsb2FkSGlzdG9yeUluZm9JbmRleFNlcnZlcixcclxuICAgICAgJ1NRTCc6IGxvYWRIaXN0b3J5SW5mb1NRTCxcclxuICAgICAgJ1JvdyBTdG9yZSc6IGxvYWRIaXN0b3J5SW5mb1Jvd1N0b3JlLFxyXG4gICAgICAnQ29sdW1uIFN0b3JlJzogbG9hZEhpc3RvcnlJbmZvQ29sdW1uU3RvcmUsXHJcbiAgICAgICdUaHJlYWRzJzogbG9hZEhpc3RvcnlJbmZvVGhyZWFkcyxcclxuICAgICAgJ1BlcnNpc3RlbmNlJzogbG9hZEhpc3RvcnlJbmZvUGVyc2lzdGVuY2UsXHJcbiAgICAgICdCYWNrdXAnOiBsb2FkSGlzdG9yeUluZm9CYWNrdXAsXHJcbiAgICAgICdTeW5jaHJvbml6YXRpb24gUHJpbWl0aXZlcyc6IGxvYWRIaXN0b3J5SW5mb1N5bmNocm9uaXphdGlvblByaW1pdGl2ZXMsXHJcbiAgICAgICdTZXNzaW9uIEFkbWlzc2lvbiBDb250cm9sJzogbG9hZEhpc3RvcnlJbmZvU2Vzc2lvbkFkbWlzc2lvbkNvbnRyb2xcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBnZXQgcmdiY29sb3Igb2JqZWN0IHZpYSByZWQsIGdyZWVuLCBibHVlIGFuZCBhbHBoYS5cclxuICAgKi9cclxuICBwcml2YXRlIHN0YXRpYyBfZ2V0UmdiQ29sb3IocmVkOiBudW1iZXIsIGdyZWVuOiBudW1iZXIsIGJsdWU6IG51bWJlciwgYWxwaGE6IG51bWJlcik6IENvbG9yUmdiYSB7XHJcbiAgICByZXR1cm4ge3JlZDogcmVkLCBncmVlbjogZ3JlZW4sIGJsdWU6IGJsdWUsIGFscGhhOiBhbHBoYX07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBfZ2V0WVNjYWxlRm9ySXRlbShpdGVtOiBhbnksIHlTY2FsZTogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB5U2NhbGUgPiBpdGVtW0l0ZW0ueVNjYWxlXSA/IChpdGVtW0l0ZW0udW5pdF0gPT09IFVuaXQuUENUID8gMTAwIDogeVNjYWxlKSA6IGl0ZW1bSXRlbS55U2NhbGVdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgX2dldE1heFZhbHVlT2ZHcm91cChncm91cEl0ZW1zOiBhbnkpOiBudW1iZXIge1xyXG4gICAgbGV0IG1heCA9IDA7XHJcbiAgICBpZiAoZ3JvdXBJdGVtcykge1xyXG4gICAgICBtYXggPSBncm91cEl0ZW1zLnJlZHVjZSgobWF4VmFsdWUsIGN1cnJlbnQpID0+IHtcclxuICAgICAgICByZXR1cm4gY3VycmVudC5NYXggPiBtYXhWYWx1ZSA/IGN1cnJlbnQuTWF4IDogbWF4VmFsdWU7XHJcbiAgICAgIH0sIDApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1heDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldExvYWRIaXN0b3J5SW5mbyhwb3J0OiBzdHJpbmcpOiBMb2FkSGlzdG9yeUluZm8ge1xyXG4gICAgaWYgKCF0aGlzLl9sb2FkSGlzdG9yeUluZm9zW3BvcnRdKSB7XHJcbiAgICAgIHRoaXMuX2xvYWRIaXN0b3J5SW5mb3NbcG9ydF0gPSBVSVNlcnZpY2UuX2dlbmVyYXRlTG9hZEhpc3RvcnlJbmZvKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5fbG9hZEhpc3RvcnlJbmZvc1twb3J0XTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldFByb2Nlc3NpbmdVbml0KGl0ZW1LZXk6IHN0cmluZywgcG9ydDogc3RyaW5nKTogVW5pdFR5cGUge1xyXG4gICAgY29uc3QgaGlzdG9yeURldGFpbEl0ZW06IExvYWRIaXN0b3J5SW5mb0l0ZW0gPSB0aGlzLl9nZXRJdGVtQnlLZXkoaXRlbUtleSwgcG9ydCk7XHJcbiAgICBpZiAoaGlzdG9yeURldGFpbEl0ZW0pIHtcclxuICAgICAgbGV0IHVuaXQgPSBoaXN0b3J5RGV0YWlsSXRlbS5Vbml0O1xyXG4gICAgICBpZiAoIXVuaXQpIHtcclxuICAgICAgICB1bml0ID0gJyc7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIFVJU2VydmljZS5fdW5pdFR5cGVbdW5pdF07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXRPdmVydmlldyAoa2V5OiBzdHJpbmcsIG92ZXJ2aWV3OiBMb2FkSGlzdG9yeUluZm9JdGVtLCB1bml0OiBVbml0VHlwZSwgcG9ydDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBoaXN0b3J5RGV0YWlsSXRlbSA9IHRoaXMuX2dldEl0ZW1CeUtleShrZXksIHBvcnQpO1xyXG4gICAgaWYgKGhpc3RvcnlEZXRhaWxJdGVtKSB7XHJcbiAgICAgIGhpc3RvcnlEZXRhaWxJdGVtLk1heCA9IG92ZXJ2aWV3Lk1heCA+PSAwID8gb3ZlcnZpZXcuTWF4IDogMDtcclxuICAgICAgaGlzdG9yeURldGFpbEl0ZW0uQXZlcmFnZSA9IG92ZXJ2aWV3LkF2ZXJhZ2UgPj0gMCA/IG92ZXJ2aWV3LkF2ZXJhZ2UgOiAwO1xyXG4gICAgICAvLyBvbmx5IFRZUEVfQ09OVkVSU0lPTl9NQlNFQyBhbmQgVFlQRV9DT05WRVJUSU9OX1NFQyAoZWc6IE1CL3MsIHJlcS9zIHN0bXQvcy4uLikgbmVlZCBzdW1cclxuICAgICAgaGlzdG9yeURldGFpbEl0ZW0uU3VtID0gaXNVbml0VGltZVJlbGF0ZWQodW5pdCkgPyAob3ZlcnZpZXcuU3VtID49IDAgPyBvdmVydmlldy5TdW0gOiAwKSA6ICctJztcclxuICAgICAgaGlzdG9yeURldGFpbEl0ZW0uTGFzdCA9IG92ZXJ2aWV3Lkxhc3QgPj0gMCA/IG92ZXJ2aWV3Lkxhc3QgOiAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogY29udmVydCB1bml0IHZhbHVlcyAoZWc6IGJ5dGUgdG8gTUIgb3IgR0IpIGFuZCBnZW5lcmF0ZSB0aGUgY29udHJvbCBkYXRhIChzdW0sIG1heCwgYXZnKSBmb3Igb25lIHJvd1xyXG4gICAqL1xyXG4gIHByaXZhdGUgX2NvbnZlcnRVbml0QW5kR2VuZXJhdGVSb3dDb250cm9sRGF0YShyb3c6IENoYXJ0Q29udGVudERhdGFJdGVtW10sIGtleTogc3RyaW5nLCB1bml0OiBVbml0VHlwZSwgcG9ydDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgaWYgKHJvdykge1xyXG4gICAgICAgIGNvbnN0IG92ZXJ2aWV3OiBMb2FkSGlzdG9yeUluZm9JdGVtID0ge1N1bTogMCwgTWF4OiAwLCBBdmVyYWdlOiAwLCBMYXN0OiAwfTtcclxuICAgICAgICBjb25zdCBpZ25vcmVkVGFpbExpbmVOdW0gPSBnZXRJZ25vcmVkTGluZU51bUZyb21UYWlsKCk7XHJcbiAgICAgICAgbGV0IGludmFsaWRDb3VudCA9IDA7XHJcbiAgICAgICAgLy8gY29udmVydCB1bml0IGFuZCBjYWxjdWxhdGUgdGhlIG92ZXJ2aWV3IGRhdGEsIHNraXAgdGhlIGZpcnN0LCBhbmQgbGFzdCB0aHJlZSByb3dzLlxyXG4gICAgICAgIHJvdy5mb3JFYWNoKChpdGVtLCBpbmRleCwgYXJyYXlEYXRhKSA9PiB7XHJcbiAgICAgICAgICAvLyBza2lwIGlnbm9yZWQgbGluZShzKSBmcm9tIHRhaWxcclxuICAgICAgICAgIGlmIChpbmRleCA8PSByb3cubGVuZ3RoIC0gaWdub3JlZFRhaWxMaW5lTnVtIC0gMSkge1xyXG4gICAgICAgICAgICBpZiAoYXJyYXlEYXRhW2luZGV4XS55ID49IDApIHtcclxuICAgICAgICAgICAgICBhcnJheURhdGFbaW5kZXhdLnkgPSBnZXRWYWx1ZUJ5VW5pdChpdGVtLnksIHVuaXQpO1xyXG4gICAgICAgICAgICAgIG92ZXJ2aWV3LlN1bSArPSBhcnJheURhdGFbaW5kZXhdLnk7XHJcbiAgICAgICAgICAgICAgaWYgKGlzVW5pdFRpbWVSZWxhdGVkKHVuaXQpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgLy8gYWNjb3JkaW5nIHRvIGhhbmEgc3R1ZGlvLCBmb3IgdGhvc2UgdGltZSByZWxhdGVkIGNvbHVtbiwgdGhlIGZpcnN0IHZhbHVlIGlzIHNldCB0byAwXHJcbiAgICAgICAgICAgICAgICAgIGFycmF5RGF0YVtpbmRleF0ueSA9IDA7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAvLyBnZXQgdmFsdWUgZm9yIHVuaXQgbGlrZTogTUIvcyAgKHZhbHVlIC8gc2Vjb25kcylcclxuICAgICAgICAgICAgICAgICAgY29uc3QgdGltZURpZmYgPSBhcnJheURhdGFbaW5kZXhdLnggLSBhcnJheURhdGFbaW5kZXggLSAxXS54O1xyXG4gICAgICAgICAgICAgICAgICBhcnJheURhdGFbaW5kZXhdLnkgPSB0aW1lRGlmZiAhPT0gMCA/IGFycmF5RGF0YVtpbmRleF0ueSAqIDEwMDAgLyB0aW1lRGlmZiA6IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGFycmF5RGF0YVtpbmRleF0ueSA9IGdldFJvdW5kZWRWYWx1ZShhcnJheURhdGFbaW5kZXhdLnkpO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoYXJyYXlEYXRhW2luZGV4XS55ID4gb3ZlcnZpZXcuTWF4KSB7XHJcbiAgICAgICAgICAgICAgICBvdmVydmlldy5NYXggPSBhcnJheURhdGFbaW5kZXhdLnk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIC8vIHNldCB2YWx1ZSB0byAwLCBmb3IgdGhvc2UgcG9pbnRzIHdpdGggdmFsdWUgLTEgb3IgPCAwXHJcbiAgICAgICAgICAgICAgYXJyYXlEYXRhW2luZGV4XS55ID0gMDtcclxuICAgICAgICAgICAgICAvLyBpbnZhbGlkIGNvdW50ICsgMSwgZm9yIGNhbGN1bGF0aW5nIHRoZSBhdmVyYWdlIChub3QgdGltZSByZWxhdGl2ZSlcclxuICAgICAgICAgICAgICBpbnZhbGlkQ291bnQrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAocm93Lmxlbmd0aCA+IChpZ25vcmVkVGFpbExpbmVOdW0gKyBpbnZhbGlkQ291bnQpKSB7XHJcbiAgICAgICAgICBpZiAoaXNVbml0VGltZVJlbGF0ZWQodW5pdCkpIHtcclxuICAgICAgICAgICAgY29uc3QgdGltZVBlcmlvZCA9IHJvd1tyb3cubGVuZ3RoIC0gaWdub3JlZFRhaWxMaW5lTnVtIC0gMV0ueCAtIHJvd1swXS54O1xyXG4gICAgICAgICAgICBvdmVydmlldy5BdmVyYWdlID0gdGltZVBlcmlvZCAhPT0gMCA/IGdldFJvdW5kZWRWYWx1ZShvdmVydmlldy5TdW0gKiAxMDAwIC8gdGltZVBlcmlvZCkgOiAwO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgb3ZlcnZpZXcuQXZlcmFnZSA9IGdldFJvdW5kZWRWYWx1ZShvdmVydmlldy5TdW0gLyAocm93Lmxlbmd0aCAtIGlnbm9yZWRUYWlsTGluZU51bSAtIGludmFsaWRDb3VudCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgb3ZlcnZpZXcuTGFzdCA9IHJvd1tyb3cubGVuZ3RoIC0gaWdub3JlZFRhaWxMaW5lTnVtIC0gMV0ueTtcclxuICAgICAgICAgIG92ZXJ2aWV3LlN1bSA9IGdldFJvdW5kZWRWYWx1ZShvdmVydmlldy5TdW0pO1xyXG4gICAgICAgICAgb3ZlcnZpZXcuTWF4ID0gZ2V0Um91bmRlZFZhbHVlKG92ZXJ2aWV3Lk1heCk7XHJcblxyXG4gICAgICAgICAgLy8gcmVtb3ZlIHRob3NlIGlnbm9yZWQgbGluZXNcclxuICAgICAgICAgIHJvdy5sZW5ndGggPSByb3cubGVuZ3RoIC0gaWdub3JlZFRhaWxMaW5lTnVtO1xyXG4gICAgICAgICAgLy8gZm9yIChsZXQgaSA9IDA7IGkgPCBJR05PUkVfUkVDT1JEX05VTV9IRUFEOyBpKyspIHtcclxuICAgICAgICAgIC8vICAgcm93LnNoaWZ0KCk7XHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3NldE92ZXJ2aWV3KGtleSwgb3ZlcnZpZXcsIHVuaXQsIHBvcnQpO1xyXG4gICAgICB9XHJcbiAgICAgIHJlc29sdmUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTG9vcCBmcm9tIGFsbCBoaXN0b3J5IGl0ZW1zLCBwdXQgdGhvc2UgaGlzdG9yeSBpdGVtcyB3aGljaFxyXG4gICAqIGhhdmUgdGhlIHNhbWUgeVNjYWxlR3JvdXAgdG9nZXRoZXIsIHVzaW5nIHlTY2FsZUdyb3VwIGFzIGtleS5cclxuICAgKiBlZzoge19fU0NBTEVfR1JPVVBfQ1BVOltpdGVtMSwgaXRlbTIuLi5dLCBfX1NDQUxFX0dST1VQX1VOS05PV046W2l0ZW0zLCBpdGVtNC4uLl19XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZ2V0WVNjYWxlR3JvdXBXaXRoSGlzdG9yeUl0ZW1zKHBvcnQ6IHN0cmluZyk6IHt9IHtcclxuICAgIGNvbnN0IHlTY2FsZUdyb3VwID0ge307XHJcbiAgICBjb25zdCBsb2FkSGlzdG9yeUluZm8gPSB0aGlzLl9nZXRMb2FkSGlzdG9yeUluZm8ocG9ydCk7XHJcblxyXG4gICAgT2JqZWN0LmtleXMobG9hZEhpc3RvcnlJbmZvKS5mb3JFYWNoKHBhcmVudEtleSA9PiB7XHJcbiAgICAgIE9iamVjdC5rZXlzKGxvYWRIaXN0b3J5SW5mb1twYXJlbnRLZXldKS5mb3JFYWNoKGNoaWxkS2V5ID0+IHtcclxuICAgICAgICBjb25zdCBkZXRhaWxJdGVtID0gbG9hZEhpc3RvcnlJbmZvW3BhcmVudEtleV1bY2hpbGRLZXldO1xyXG4gICAgICAgIGNvbnN0IHlTY2FsZUdyb3VwS2V5ID0gZGV0YWlsSXRlbS5fWVNjYWxlR3JvdXA7XHJcbiAgICAgICAgaWYgKCF5U2NhbGVHcm91cFt5U2NhbGVHcm91cEtleV0pIHtcclxuICAgICAgICAgIHlTY2FsZUdyb3VwW3lTY2FsZUdyb3VwS2V5XSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB5U2NhbGVHcm91cFt5U2NhbGVHcm91cEtleV0ucHVzaChkZXRhaWxJdGVtKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB5U2NhbGVHcm91cDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NldFlTY2FsZU9mR3JvdXAoZ3JvdXBJdGVtczogYW55LCBncm91cDogU2NhbGVHcm91cCkge1xyXG4gICAgaWYgKGdyb3VwSXRlbXMpIHtcclxuICAgICAgaWYgKGdyb3VwID09PSBTY2FsZUdyb3VwLlVua25vd24pIHtcclxuICAgICAgICBncm91cEl0ZW1zLmZvckVhY2goaXRlbSA9PiBpdGVtW0l0ZW0ueVNjYWxlXSA9IFVJU2VydmljZS5fZ2V0WVNjYWxlRm9ySXRlbShpdGVtLCBjYWxjdWxhdGVZU2NhbGUoaXRlbS5NYXgpKSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgeVNjYWxlID0gY2FsY3VsYXRlWVNjYWxlKFVJU2VydmljZS5fZ2V0TWF4VmFsdWVPZkdyb3VwKGdyb3VwSXRlbXMpKTtcclxuICAgICAgICBncm91cEl0ZW1zLmZvckVhY2goaXRlbSA9PiAgaXRlbVtJdGVtLnlTY2FsZV0gPSBVSVNlcnZpY2UuX2dldFlTY2FsZUZvckl0ZW0oaXRlbSwgeVNjYWxlKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldEl0ZW1CeUtleShrZXk6IHN0cmluZywgcG9ydDogc3RyaW5nKTogYW55IHtcclxuICAgIGNvbnN0IGxvYWRIaXN0b3J5SW5mbyA9IHRoaXMuX2dldExvYWRIaXN0b3J5SW5mbyhwb3J0KTtcclxuICAgIGZvciAoIGNvbnN0IGl0ZW1LZXkgb2YgT2JqZWN0LmtleXMobG9hZEhpc3RvcnlJbmZvKSkge1xyXG4gICAgICBpZiAoa2V5IGluIGxvYWRIaXN0b3J5SW5mb1tpdGVtS2V5XSkge1xyXG4gICAgICAgIHJldHVybiBsb2FkSGlzdG9yeUluZm9baXRlbUtleV1ba2V5XTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogcmVzZXQgdGhlIGxvYWQgaGlzdG9yeSBpbmZvIG9iamVjdCwgdG8gcHJldmVudCBtZW1vcnkgbGVha1xyXG4gICAqL1xyXG4gIHB1YmxpYyBjbGVhckxvYWRIaXN0b3J5SW5mb3MoKSB7XHJcbiAgICB0aGlzLl9sb2FkSGlzdG9yeUluZm9zID0ge307XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBnZXQgYWxsIHRoZSBkYXRhIGZvciB0aGUgc2VsZWN0aW9uIHRhYmxlXHJcbiAgICovXHJcbiAgcHVibGljIGdldFNlbGVjdGlvblRhYmxlUm93cyhoZWFkZXJLZXlzOiBzdHJpbmdbXSwgcG9ydDogc3RyaW5nLCBkZWZhdWx0RGlzcGxheUl0ZW1zOiBzdHJpbmdbXSk6IGFueVtdIHtcclxuICAgIGNvbnN0IHJvd3M6IGFueVtdID0gW107XHJcbiAgICBjb25zdCBsb2FkSGlzdG9yeUluZm8gPSB0aGlzLl9nZXRMb2FkSGlzdG9yeUluZm8ocG9ydCk7XHJcblxyXG4gICAgY29uc3QgZGVmYXVsdEl0ZW1zID0gZGVmYXVsdERpc3BsYXlJdGVtcyAmJiBkZWZhdWx0RGlzcGxheUl0ZW1zLmxlbmd0aCA+IDAgPyBkZWZhdWx0RGlzcGxheUl0ZW1zIDogdGhpcy5fREVGQVVMVF9ESVNQTEFZX0lURU1TO1xyXG5cclxuICAgIE9iamVjdC5rZXlzKGxvYWRIaXN0b3J5SW5mbykuZm9yRWFjaChrZXlQYXJlbnQgPT4ge1xyXG4gICAgICByb3dzLnB1c2goe0tQSToga2V5UGFyZW50LCBoZWFkZXI6IHRydWV9KTtcclxuICAgICAgY29uc3QgbGVuID0gcm93cy5sZW5ndGg7XHJcbiAgICAgIHJvd3MucHVzaCguLi5PYmplY3Qua2V5cyhsb2FkSGlzdG9yeUluZm9ba2V5UGFyZW50XSlcclxuICAgICAgICAuZmlsdGVyKGtleUNoaWxkID0+IGhlYWRlcktleXMuaW5jbHVkZXMoa2V5Q2hpbGQpKVxyXG4gICAgICAgIC5tYXAoa2V5Q2hpbGQgPT4ge1xyXG4gICAgICAgICAgbG9hZEhpc3RvcnlJbmZvW2tleVBhcmVudF1ba2V5Q2hpbGRdLmhlYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgbG9hZEhpc3RvcnlJbmZvW2tleVBhcmVudF1ba2V5Q2hpbGRdLmNoZWNrZWQgPSBkZWZhdWx0SXRlbXMuaW5jbHVkZXMoa2V5Q2hpbGQpO1xyXG4gICAgICAgICAgcmV0dXJuIGxvYWRIaXN0b3J5SW5mb1trZXlQYXJlbnRdW2tleUNoaWxkXTtcclxuICAgICAgfSkpO1xyXG4gICAgICBpZiAobGVuID09PSByb3dzLmxlbmd0aCkge1xyXG4gICAgICAgIC8vIG5vIHN1YiBpdGVtcywgcmVtb3ZlIHRoZSBoZWFkZXJcclxuICAgICAgICByb3dzLnBvcCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcm93cztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCBhbGwgaGlkZGVuIGNvbHVtbnMuIFRob3NlIGhpZGRlbiBjb2x1bW5zID0gaW5wdXQgaGlkZGVuIGNvbHVtbnMgKyBkZWZhdWx0IGhpZGRlbiBjb2x1bW5zXHJcbiAgICogQHBhcmFtIGhpZGVNZWFzdXJlQ29sdW1ucyB0aGUgYXJyYXkgY29udGFpbnMgdGhlIGNvbHVtbnMgbGlzdCB0aGF0IG5lZWQgdG8gYmUgaGlkZGVuLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRIaWRkZW5Db2x1bW5zKGhpZGVNZWFzdXJlQ29sdW1uczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XHJcbiAgICAvLyBvbmx5IG1lYXN1cmUgY29sdW1ucyBjYW4gYmUgaGlkZGVuXHJcbiAgICBjb25zdCBoaWRlQ29sdW1ucyA9IGhpZGVNZWFzdXJlQ29sdW1ucyA/IGhpZGVNZWFzdXJlQ29sdW1ucy5maWx0ZXIoY29sdW1uID0+IHRoaXMuX01FQVNVUkVfQ09MVU1OUy5pbmNsdWRlcyhjb2x1bW4pKSA6IFtdO1xyXG4gICAgcmV0dXJuIGhpZGVDb2x1bW5zID8gdGhpcy5fSElERURfQ09MVU1OUy5jb25jYXQoaGlkZUNvbHVtbnMpIDogdGhpcy5fSElERURfQ09MVU1OUztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCBoZWFkZXIgaW5mb3JtYXRpb24gYW5kIGZvcm1hdCBpdCB0byB7aGVhZEtleToga2V5LCBoZWFkVGV4dDogdGV4dH1cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0SGVhZGVyKGtleXM6IHN0cmluZ1tdLCBwb3J0OiBzdHJpbmcpOiBDaGFydENvbnRlbnRIZWFkZXJbXSB7XHJcbiAgICByZXR1cm4ga2V5cy5tYXAoa2V5ID0+ICh7a2V5OiBrZXksIHRleHQ6IHRoaXMuX2dldEl0ZW1CeUtleShrZXksIHBvcnQpLktQSX0pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgc2VsZWN0ZWQgaXRlbXMsIHdoaWNoIG5lZWQgdG8gYmUgZGlzcGxheWVkIG9uIHRoZSBjaGFydC5cclxuICAgKiBAcGFyYW0gaGVhZGVyS2V5cyBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSBrZXlzIG9mIGhlYWRlclxyXG4gICAqIEBwYXJhbSBwb3J0IHRoZSByZWxhdGl2ZSBwb3J0XHJcbiAgICogQHBhcmFtIGRlZmF1bHREaXNwbGF5SXRlbXMgdGhlIGl0ZW1zIGxpc3QgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCBieSBkZWZhdWx0LlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXREaXNwbGF5SXRlbXMoaGVhZGVyS2V5czogc3RyaW5nW10sIHBvcnQ6IHN0cmluZywgZGVmYXVsdERpc3BsYXlJdGVtczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25UYWJsZSA9IHRoaXMuZ2V0U2VsZWN0aW9uVGFibGVSb3dzKGhlYWRlcktleXMsIHBvcnQsIGRlZmF1bHREaXNwbGF5SXRlbXMpO1xyXG4gICAgcmV0dXJuIHNlbGVjdGlvblRhYmxlLmZpbHRlcihyb3cgPT4gcm93LmNoZWNrZWQpLm1hcChyb3cgPT4gcm93LktQSSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIFkgU2NhbGUgYnkgdGhlIGtleXMgYW5kIHBvcnRcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0WVNjYWxlKGtleXM6IHN0cmluZ1tdLCBwb3J0OiBzdHJpbmcpOiBudW1iZXJbXSB7XHJcbiAgICBjb25zdCB5U2NhbGVzID0gW107XHJcbiAgICBpZiAoa2V5cykge1xyXG4gICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICB5U2NhbGVzLnB1c2godGhpcy5fZ2V0SXRlbUJ5S2V5KGtleSwgcG9ydClbSXRlbS55U2NhbGVdKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geVNjYWxlcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlIFkgU2NhbGUgZm9yIHRoZSBwb3J0XHJcbiAgICovXHJcbiAgcHVibGljIGdlbmVyYXRlWVNjYWxlKHBvcnQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgeVNjYWxlR3JvdXAgPSB0aGlzLl9nZXRZU2NhbGVHcm91cFdpdGhIaXN0b3J5SXRlbXMocG9ydCk7XHJcbiAgICBVSVNlcnZpY2UuX1lTY2FsZUdyb3VwTGlzdC5mb3JFYWNoKGdyb3VwID0+IHtcclxuICAgICAgY29uc3QgaGlzdG9yeUl0ZW1zID0geVNjYWxlR3JvdXBbZ3JvdXBdO1xyXG4gICAgICBpZiAoaGlzdG9yeUl0ZW1zKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0WVNjYWxlT2ZHcm91cChoaXN0b3J5SXRlbXMsIGdyb3VwKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBjb252ZXJ0IHVuaXQgdmFsdWVzIChlZzogYnl0ZSB0byBNQiBvciBHQikgYW5kIGdlbmVyYXRlIHRoZSBjb250cm9sIGRhdGEgKHN1bSwgbWF4LCBhdmcpXHJcbiAgICogQHBhcmFtIGRhdGEgdGhlIG5hbWVzZXJ2ZXIgaGlzdG9yeSBkYXRhXHJcbiAgICogQHBhcmFtIGhlYWRlciBoZWFkZXIgbGlzdFxyXG4gICAqIEBwYXJhbSBwb3J0IHNlbGVjdGVkIHBvcnRcclxuICAgKi9cclxuICBwdWJsaWMgY29udmVydFVuaXRBbmRHZW5lcmF0ZUNvbnRyb2xEYXRhKGRhdGE6IENoYXJ0Q29udGVudERhdGFJdGVtW11bXSwgaGVhZGVyOiBzdHJpbmdbXSwgcG9ydDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGNvbnN0IHByb21pc2VzID0gW107XHJcbiAgICBpZiAoZGF0YSAmJiBoZWFkZXIpIHtcclxuICAgICAgZGF0YS5mb3JFYWNoKChyb3csIGluZGV4KSA9PiB7XHJcbiAgICAgICAgaWYgKHJvdykge1xyXG4gICAgICAgICAgLy8gZ2V0IGRldGFpbCBoaXN0b3J5IGl0ZW0ga2V5LCBsaWtlIGluZGV4c2VydmVyQ3B1XHJcbiAgICAgICAgICBjb25zdCBpdGVtS2V5ID0gaGVhZGVyW2luZGV4XTtcclxuICAgICAgICAgIGNvbnN0IHVuaXQgPSB0aGlzLl9nZXRQcm9jZXNzaW5nVW5pdChpdGVtS2V5LCBwb3J0KTtcclxuICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy5fY29udmVydFVuaXRBbmRHZW5lcmF0ZVJvd0NvbnRyb2xEYXRhKHJvdywgaXRlbUtleSwgdW5pdCwgcG9ydCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xyXG4gIH1cclxufVxyXG5cclxuIl19