@openziti/ziti-console-lib 1.0.2 → 1.1.0

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 (563) hide show
  1. package/assets/styles/global.scss +70 -0
  2. package/fesm2022/openziti-ziti-console-lib.mjs +2136 -1327
  3. package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
  4. package/index.d.ts +5689 -6
  5. package/index.d.ts.map +1 -0
  6. package/package.json +10 -12
  7. package/esm2022/lib/ZAC_VERSION.mjs +0 -4
  8. package/esm2022/lib/app.initializer.mjs +0 -24
  9. package/esm2022/lib/default-app-config.mjs +0 -5
  10. package/esm2022/lib/features/card/card.component.mjs +0 -34
  11. package/esm2022/lib/features/card-list/card-list.component.mjs +0 -55
  12. package/esm2022/lib/features/config-editor/config-editor.component.mjs +0 -337
  13. package/esm2022/lib/features/confirm/confirm.component.mjs +0 -77
  14. package/esm2022/lib/features/creation-summary-dialog/creation-summary-dialog.component.mjs +0 -93
  15. package/esm2022/lib/features/custom-tags/custom-tags.component.mjs +0 -111
  16. package/esm2022/lib/features/data-table/cells/table-cell-menu/table-cell-menu.component.mjs +0 -46
  17. package/esm2022/lib/features/data-table/cells/table-cell-name/table-cell-name.component.mjs +0 -49
  18. package/esm2022/lib/features/data-table/cells/table-cell-select/table-cell-select.component.mjs +0 -58
  19. package/esm2022/lib/features/data-table/cells/table-cell-token/table-cell-token.component.mjs +0 -123
  20. package/esm2022/lib/features/data-table/column-headers/table-column-default/table-column-default.component.mjs +0 -268
  21. package/esm2022/lib/features/data-table/column-headers/table-column-filter/table-column-filter.component.mjs +0 -93
  22. package/esm2022/lib/features/data-table/column-headers/table-column-menu/table-column-menu.component.mjs +0 -37
  23. package/esm2022/lib/features/data-table/column-headers/table-column-select/table-column-select.component.mjs +0 -33
  24. package/esm2022/lib/features/data-table/data-table-filter.service.mjs +0 -138
  25. package/esm2022/lib/features/data-table/data-table.component.mjs +0 -918
  26. package/esm2022/lib/features/data-table/data-table.service.mjs +0 -98
  27. package/esm2022/lib/features/data-table/table-filter-bar/filter-bar.component.mjs +0 -108
  28. package/esm2022/lib/features/data-table/table-hidden-columns-bar/hidden-columns-bar.component.mjs +0 -26
  29. package/esm2022/lib/features/data-table/tooltips/os-tooltip.component.mjs +0 -29
  30. package/esm2022/lib/features/data-table/tooltips/sdk-tooltip.component.mjs +0 -34
  31. package/esm2022/lib/features/dynamic-widgets/boolean/boolean-toggle-input.component.mjs +0 -72
  32. package/esm2022/lib/features/dynamic-widgets/checkbox-list/checkbox-list-input.component.mjs +0 -134
  33. package/esm2022/lib/features/dynamic-widgets/forwarding-config/forwarding-config.component.mjs +0 -189
  34. package/esm2022/lib/features/dynamic-widgets/forwarding-config/forwarding-config.service.mjs +0 -50
  35. package/esm2022/lib/features/dynamic-widgets/number/number-input.component.mjs +0 -95
  36. package/esm2022/lib/features/dynamic-widgets/object/object.component.mjs +0 -121
  37. package/esm2022/lib/features/dynamic-widgets/password/password-input.component.mjs +0 -83
  38. package/esm2022/lib/features/dynamic-widgets/port-ranges/port-ranges.component.mjs +0 -100
  39. package/esm2022/lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component.mjs +0 -201
  40. package/esm2022/lib/features/dynamic-widgets/selector/selector-input.component.mjs +0 -166
  41. package/esm2022/lib/features/dynamic-widgets/string/string-input.component.mjs +0 -108
  42. package/esm2022/lib/features/dynamic-widgets/text-list/text-list-input.component.mjs +0 -126
  43. package/esm2022/lib/features/extendable/extendable.component.mjs +0 -55
  44. package/esm2022/lib/features/extendable/extensions-noop.service.mjs +0 -52
  45. package/esm2022/lib/features/header-bar/header-bar.component.mjs +0 -105
  46. package/esm2022/lib/features/json-view/json-view.component.mjs +0 -212
  47. package/esm2022/lib/features/list-page-features/list-page-form/list-page-form.component.mjs +0 -138
  48. package/esm2022/lib/features/list-page-features/list-page-header/list-page-header.component.mjs +0 -66
  49. package/esm2022/lib/features/loading-indicator/loading-indicator.component.mjs +0 -29
  50. package/esm2022/lib/features/login/login-dialog.component.mjs +0 -121
  51. package/esm2022/lib/features/messaging/growler.component.mjs +0 -62
  52. package/esm2022/lib/features/messaging/growler.model.mjs +0 -24
  53. package/esm2022/lib/features/messaging/growler.module.mjs +0 -34
  54. package/esm2022/lib/features/messaging/growler.service.mjs +0 -71
  55. package/esm2022/lib/features/messaging/logger.service.mjs +0 -174
  56. package/esm2022/lib/features/multi-action-button/multi-action-button.component.mjs +0 -30
  57. package/esm2022/lib/features/no-items/no-items.component.mjs +0 -46
  58. package/esm2022/lib/features/overrides/overrides.component.mjs +0 -118
  59. package/esm2022/lib/features/overrides/overrides.service.mjs +0 -114
  60. package/esm2022/lib/features/preview-list/preview-list.component.mjs +0 -151
  61. package/esm2022/lib/features/preview-selections/preview-selections.component.mjs +0 -114
  62. package/esm2022/lib/features/progress-meter/progress-meter.component.mjs +0 -43
  63. package/esm2022/lib/features/progress-wizard/progress-wizard.component.mjs +0 -90
  64. package/esm2022/lib/features/projectable-forms/api-session/api-session-form.component.mjs +0 -143
  65. package/esm2022/lib/features/projectable-forms/api-session/api-session-form.service.mjs +0 -118
  66. package/esm2022/lib/features/projectable-forms/auth-policy/auth-policy-form.component.mjs +0 -337
  67. package/esm2022/lib/features/projectable-forms/auth-policy/auth-policy-form.service.mjs +0 -114
  68. package/esm2022/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.mjs +0 -399
  69. package/esm2022/lib/features/projectable-forms/certificate-authority/certificate-authority-form.service.mjs +0 -95
  70. package/esm2022/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.mjs +0 -217
  71. package/esm2022/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.service.mjs +0 -54
  72. package/esm2022/lib/features/projectable-forms/config-type/config-type-form.component.mjs +0 -244
  73. package/esm2022/lib/features/projectable-forms/config-type/config-type-form.service.mjs +0 -92
  74. package/esm2022/lib/features/projectable-forms/configuration/configuration-form.component.mjs +0 -275
  75. package/esm2022/lib/features/projectable-forms/configuration/configuration.service.mjs +0 -137
  76. package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.component.mjs +0 -231
  77. package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.service.mjs +0 -118
  78. package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.mjs +0 -277
  79. package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.mjs +0 -188
  80. package/esm2022/lib/features/projectable-forms/form-field-container/form-field-container.component.mjs +0 -101
  81. package/esm2022/lib/features/projectable-forms/form-field-toggle/form-field-toggle.component.mjs +0 -54
  82. package/esm2022/lib/features/projectable-forms/form-header/form-header.component.mjs +0 -135
  83. package/esm2022/lib/features/projectable-forms/identity/identity-form.component.mjs +0 -471
  84. package/esm2022/lib/features/projectable-forms/identity/identity-form.service.mjs +0 -131
  85. package/esm2022/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.mjs +0 -533
  86. package/esm2022/lib/features/projectable-forms/jwt-signer/jwt-signer-form.service.mjs +0 -79
  87. package/esm2022/lib/features/projectable-forms/posture-check/posture-check-form.component.mjs +0 -437
  88. package/esm2022/lib/features/projectable-forms/posture-check/posture-check-form.service.mjs +0 -81
  89. package/esm2022/lib/features/projectable-forms/projectable-form.class.mjs +0 -315
  90. package/esm2022/lib/features/projectable-forms/service/service-form.component.mjs +0 -330
  91. package/esm2022/lib/features/projectable-forms/service/service-form.service.mjs +0 -591
  92. package/esm2022/lib/features/projectable-forms/service/simple-service/simple-service.component.mjs +0 -1036
  93. package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.mjs +0 -275
  94. package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.mjs +0 -172
  95. package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.component.mjs +0 -279
  96. package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.service.mjs +0 -230
  97. package/esm2022/lib/features/projectable-forms/session/session-form.component.mjs +0 -213
  98. package/esm2022/lib/features/projectable-forms/session/session-form.service.mjs +0 -84
  99. package/esm2022/lib/features/projectable-forms/terminator/terminator-form.component.mjs +0 -244
  100. package/esm2022/lib/features/projectable-forms/terminator/terminator-form.service.mjs +0 -130
  101. package/esm2022/lib/features/projectable-forms/transit-router/transit-router-form.component.mjs +0 -224
  102. package/esm2022/lib/features/projectable-forms/transit-router/transit-router-form.service.mjs +0 -118
  103. package/esm2022/lib/features/qr-code/qr-code.component.mjs +0 -166
  104. package/esm2022/lib/features/quick-add/quick-add.component.mjs +0 -50
  105. package/esm2022/lib/features/reset-enrollment/reset-enrollment.component.mjs +0 -86
  106. package/esm2022/lib/features/reset-enrollment/reset-enrollment.service.mjs +0 -61
  107. package/esm2022/lib/features/side-modal/side-modal.component.mjs +0 -45
  108. package/esm2022/lib/features/side-navigator/side-navigator.component.mjs +0 -127
  109. package/esm2022/lib/features/sidebars/side-navbar/side-navbar.component.mjs +0 -54
  110. package/esm2022/lib/features/tag-selector/tag-selector.component.mjs +0 -291
  111. package/esm2022/lib/features/visualizer/identity-service-path/identity-service-path.component.mjs +0 -586
  112. package/esm2022/lib/features/visualizer/identity-service-path/identity-service-path.helper.mjs +0 -373
  113. package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.component.mjs +0 -1706
  114. package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.helper.mjs +0 -591
  115. package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.treenodeprocessor.mjs +0 -883
  116. package/esm2022/lib/features/visualizer/visualizer-service.class.mjs +0 -32
  117. package/esm2022/lib/models/api-session.mjs +0 -7
  118. package/esm2022/lib/models/auth-policy.mjs +0 -31
  119. package/esm2022/lib/models/certificate-authority.mjs +0 -16
  120. package/esm2022/lib/models/config-type.mjs +0 -10
  121. package/esm2022/lib/models/config.mjs +0 -10
  122. package/esm2022/lib/models/edge-router-policy.mjs +0 -11
  123. package/esm2022/lib/models/edge-router.mjs +0 -13
  124. package/esm2022/lib/models/identity.mjs +0 -34
  125. package/esm2022/lib/models/jwt-signer.mjs +0 -20
  126. package/esm2022/lib/models/posture-check.mjs +0 -29
  127. package/esm2022/lib/models/service-edge-router-policy.mjs +0 -11
  128. package/esm2022/lib/models/service-policy.mjs +0 -13
  129. package/esm2022/lib/models/service.mjs +0 -12
  130. package/esm2022/lib/models/session.mjs +0 -7
  131. package/esm2022/lib/models/terminator.mjs +0 -14
  132. package/esm2022/lib/pages/api-sessions/api-sessions-page.component.mjs +0 -112
  133. package/esm2022/lib/pages/api-sessions/api-sessions-page.service.mjs +0 -235
  134. package/esm2022/lib/pages/attributes/attributes.component.mjs +0 -104
  135. package/esm2022/lib/pages/auth-policies/auth-policies-page.component.mjs +0 -120
  136. package/esm2022/lib/pages/auth-policies/auth-policies-page.service.mjs +0 -215
  137. package/esm2022/lib/pages/callback/callback.component.mjs +0 -155
  138. package/esm2022/lib/pages/certificate-authorities/certificate-authorities-page.component.mjs +0 -119
  139. package/esm2022/lib/pages/certificate-authorities/certificate-authorities-page.service.mjs +0 -240
  140. package/esm2022/lib/pages/config-types/config-types-page.component.mjs +0 -130
  141. package/esm2022/lib/pages/config-types/config-types-page.service.mjs +0 -134
  142. package/esm2022/lib/pages/configurations/configurations-page.component.mjs +0 -134
  143. package/esm2022/lib/pages/configurations/configurations-page.service.mjs +0 -251
  144. package/esm2022/lib/pages/edge-router-policies/edge-router-policies-page.component.mjs +0 -128
  145. package/esm2022/lib/pages/edge-router-policies/edge-router-policies-page.service.mjs +0 -407
  146. package/esm2022/lib/pages/edge-routers/edge-routers-page.component.mjs +0 -136
  147. package/esm2022/lib/pages/edge-routers/edge-routers-page.service.mjs +0 -354
  148. package/esm2022/lib/pages/geolocate/geolocate.component.mjs +0 -130
  149. package/esm2022/lib/pages/identities/identities-page.component.mjs +0 -221
  150. package/esm2022/lib/pages/identities/identities-page.service.mjs +0 -591
  151. package/esm2022/lib/pages/jwt-signers/jwt-signers-page.component.mjs +0 -160
  152. package/esm2022/lib/pages/jwt-signers/jwt-signers-page.service.mjs +0 -177
  153. package/esm2022/lib/pages/posture-checks/posture-checks-page.component.mjs +0 -103
  154. package/esm2022/lib/pages/posture-checks/posture-checks-page.service.mjs +0 -200
  155. package/esm2022/lib/pages/profile/profile.component.mjs +0 -58
  156. package/esm2022/lib/pages/service-edge-router-policies/service-edge-router-policies-page.component.mjs +0 -122
  157. package/esm2022/lib/pages/service-edge-router-policies/service-edge-router-policies-page.service.mjs +0 -367
  158. package/esm2022/lib/pages/service-policies/service-policies-page.component.mjs +0 -124
  159. package/esm2022/lib/pages/service-policies/service-policies-page.service.mjs +0 -446
  160. package/esm2022/lib/pages/services/services-page.component.mjs +0 -218
  161. package/esm2022/lib/pages/services/services-page.service.mjs +0 -378
  162. package/esm2022/lib/pages/sessions/sessions-page.component.mjs +0 -112
  163. package/esm2022/lib/pages/sessions/sessions-page.service.mjs +0 -228
  164. package/esm2022/lib/pages/settings/settings.component.mjs +0 -61
  165. package/esm2022/lib/pages/terminators/terminators-page.component.mjs +0 -97
  166. package/esm2022/lib/pages/terminators/terminators-page.service.mjs +0 -235
  167. package/esm2022/lib/pages/transit-routers/transit-routers-page.component.mjs +0 -129
  168. package/esm2022/lib/pages/transit-routers/transit-routers-page.service.mjs +0 -248
  169. package/esm2022/lib/safe.pipe.mjs +0 -18
  170. package/esm2022/lib/services/auth.service.mjs +0 -94
  171. package/esm2022/lib/services/console-events.service.mjs +0 -20
  172. package/esm2022/lib/services/csv-download.service.mjs +0 -91
  173. package/esm2022/lib/services/deactivate-guard.service.mjs +0 -17
  174. package/esm2022/lib/services/login-service.class.mjs +0 -47
  175. package/esm2022/lib/services/node-data.service.mjs +0 -397
  176. package/esm2022/lib/services/noop-login.service.mjs +0 -41
  177. package/esm2022/lib/services/schema.service.mjs +0 -807
  178. package/esm2022/lib/services/settings-service.class.mjs +0 -120
  179. package/esm2022/lib/services/settings.service.mjs +0 -203
  180. package/esm2022/lib/services/tab-name.service.mjs +0 -76
  181. package/esm2022/lib/services/validation.service.mjs +0 -156
  182. package/esm2022/lib/services/ziti-controller-data.service.mjs +0 -340
  183. package/esm2022/lib/services/ziti-data.service.mjs +0 -100
  184. package/esm2022/lib/services/ziti-domain-controller.service.mjs +0 -3
  185. package/esm2022/lib/shared/list-page-component.class.mjs +0 -186
  186. package/esm2022/lib/shared/list-page-service.class.mjs +0 -244
  187. package/esm2022/lib/urls.mjs +0 -34
  188. package/esm2022/lib/zac-routing.module.mjs +0 -34
  189. package/esm2022/lib/ziti-console-lib.module.mjs +0 -538
  190. package/esm2022/lib/ziti-console.constants.mjs +0 -20
  191. package/esm2022/openziti-ziti-console-lib.mjs +0 -5
  192. package/esm2022/public-api.mjs +0 -130
  193. package/lib/ZAC_VERSION.d.ts +0 -4
  194. package/lib/ZAC_VERSION.d.ts.map +0 -1
  195. package/lib/app.initializer.d.ts +0 -3
  196. package/lib/app.initializer.d.ts.map +0 -1
  197. package/lib/default-app-config.d.ts +0 -9
  198. package/lib/default-app-config.d.ts.map +0 -1
  199. package/lib/features/card/card.component.d.ts +0 -13
  200. package/lib/features/card/card.component.d.ts.map +0 -1
  201. package/lib/features/card-list/card-list.component.d.ts +0 -27
  202. package/lib/features/card-list/card-list.component.d.ts.map +0 -1
  203. package/lib/features/config-editor/config-editor.component.d.ts +0 -50
  204. package/lib/features/config-editor/config-editor.component.d.ts.map +0 -1
  205. package/lib/features/confirm/confirm.component.d.ts +0 -34
  206. package/lib/features/confirm/confirm.component.d.ts.map +0 -1
  207. package/lib/features/creation-summary-dialog/creation-summary-dialog.component.d.ts +0 -32
  208. package/lib/features/creation-summary-dialog/creation-summary-dialog.component.d.ts.map +0 -1
  209. package/lib/features/custom-tags/custom-tags.component.d.ts +0 -37
  210. package/lib/features/custom-tags/custom-tags.component.d.ts.map +0 -1
  211. package/lib/features/data-table/cells/table-cell-menu/table-cell-menu.component.d.ts +0 -16
  212. package/lib/features/data-table/cells/table-cell-menu/table-cell-menu.component.d.ts.map +0 -1
  213. package/lib/features/data-table/cells/table-cell-name/table-cell-name.component.d.ts +0 -20
  214. package/lib/features/data-table/cells/table-cell-name/table-cell-name.component.d.ts.map +0 -1
  215. package/lib/features/data-table/cells/table-cell-select/table-cell-select.component.d.ts +0 -15
  216. package/lib/features/data-table/cells/table-cell-select/table-cell-select.component.d.ts.map +0 -1
  217. package/lib/features/data-table/cells/table-cell-token/table-cell-token.component.d.ts +0 -22
  218. package/lib/features/data-table/cells/table-cell-token/table-cell-token.component.d.ts.map +0 -1
  219. package/lib/features/data-table/column-headers/table-column-default/table-column-default.component.d.ts +0 -52
  220. package/lib/features/data-table/column-headers/table-column-default/table-column-default.component.d.ts.map +0 -1
  221. package/lib/features/data-table/column-headers/table-column-filter/table-column-filter.component.d.ts +0 -27
  222. package/lib/features/data-table/column-headers/table-column-filter/table-column-filter.component.d.ts.map +0 -1
  223. package/lib/features/data-table/column-headers/table-column-menu/table-column-menu.component.d.ts +0 -19
  224. package/lib/features/data-table/column-headers/table-column-menu/table-column-menu.component.d.ts.map +0 -1
  225. package/lib/features/data-table/column-headers/table-column-select/table-column-select.component.d.ts +0 -15
  226. package/lib/features/data-table/column-headers/table-column-select/table-column-select.component.d.ts.map +0 -1
  227. package/lib/features/data-table/data-table-filter.service.d.ts +0 -37
  228. package/lib/features/data-table/data-table-filter.service.d.ts.map +0 -1
  229. package/lib/features/data-table/data-table.component.d.ts +0 -164
  230. package/lib/features/data-table/data-table.component.d.ts.map +0 -1
  231. package/lib/features/data-table/data-table.service.d.ts +0 -20
  232. package/lib/features/data-table/data-table.service.d.ts.map +0 -1
  233. package/lib/features/data-table/table-filter-bar/filter-bar.component.d.ts +0 -25
  234. package/lib/features/data-table/table-filter-bar/filter-bar.component.d.ts.map +0 -1
  235. package/lib/features/data-table/table-hidden-columns-bar/hidden-columns-bar.component.d.ts +0 -10
  236. package/lib/features/data-table/table-hidden-columns-bar/hidden-columns-bar.component.d.ts.map +0 -1
  237. package/lib/features/data-table/tooltips/os-tooltip.component.d.ts +0 -15
  238. package/lib/features/data-table/tooltips/os-tooltip.component.d.ts.map +0 -1
  239. package/lib/features/data-table/tooltips/sdk-tooltip.component.d.ts +0 -15
  240. package/lib/features/data-table/tooltips/sdk-tooltip.component.d.ts.map +0 -1
  241. package/lib/features/dynamic-widgets/boolean/boolean-toggle-input.component.d.ts +0 -19
  242. package/lib/features/dynamic-widgets/boolean/boolean-toggle-input.component.d.ts.map +0 -1
  243. package/lib/features/dynamic-widgets/checkbox-list/checkbox-list-input.component.d.ts +0 -28
  244. package/lib/features/dynamic-widgets/checkbox-list/checkbox-list-input.component.d.ts.map +0 -1
  245. package/lib/features/dynamic-widgets/forwarding-config/forwarding-config.component.d.ts +0 -50
  246. package/lib/features/dynamic-widgets/forwarding-config/forwarding-config.component.d.ts.map +0 -1
  247. package/lib/features/dynamic-widgets/forwarding-config/forwarding-config.service.d.ts +0 -14
  248. package/lib/features/dynamic-widgets/forwarding-config/forwarding-config.service.d.ts.map +0 -1
  249. package/lib/features/dynamic-widgets/number/number-input.component.d.ts +0 -23
  250. package/lib/features/dynamic-widgets/number/number-input.component.d.ts.map +0 -1
  251. package/lib/features/dynamic-widgets/object/object.component.d.ts +0 -26
  252. package/lib/features/dynamic-widgets/object/object.component.d.ts.map +0 -1
  253. package/lib/features/dynamic-widgets/password/password-input.component.d.ts +0 -24
  254. package/lib/features/dynamic-widgets/password/password-input.component.d.ts.map +0 -1
  255. package/lib/features/dynamic-widgets/port-ranges/port-ranges.component.d.ts +0 -22
  256. package/lib/features/dynamic-widgets/port-ranges/port-ranges.component.d.ts.map +0 -1
  257. package/lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component.d.ts +0 -60
  258. package/lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component.d.ts.map +0 -1
  259. package/lib/features/dynamic-widgets/selector/selector-input.component.d.ts +0 -30
  260. package/lib/features/dynamic-widgets/selector/selector-input.component.d.ts.map +0 -1
  261. package/lib/features/dynamic-widgets/string/string-input.component.d.ts +0 -27
  262. package/lib/features/dynamic-widgets/string/string-input.component.d.ts.map +0 -1
  263. package/lib/features/dynamic-widgets/text-list/text-list-input.component.d.ts +0 -26
  264. package/lib/features/dynamic-widgets/text-list/text-list-input.component.d.ts.map +0 -1
  265. package/lib/features/extendable/extendable.component.d.ts +0 -15
  266. package/lib/features/extendable/extendable.component.d.ts.map +0 -1
  267. package/lib/features/extendable/extensions-noop.service.d.ts +0 -35
  268. package/lib/features/extendable/extensions-noop.service.d.ts.map +0 -1
  269. package/lib/features/header-bar/header-bar.component.d.ts +0 -29
  270. package/lib/features/header-bar/header-bar.component.d.ts.map +0 -1
  271. package/lib/features/json-view/json-view.component.d.ts +0 -40
  272. package/lib/features/json-view/json-view.component.d.ts.map +0 -1
  273. package/lib/features/list-page-features/list-page-form/list-page-form.component.d.ts +0 -35
  274. package/lib/features/list-page-features/list-page-form/list-page-form.component.d.ts.map +0 -1
  275. package/lib/features/list-page-features/list-page-header/list-page-header.component.d.ts +0 -14
  276. package/lib/features/list-page-features/list-page-header/list-page-header.component.d.ts.map +0 -1
  277. package/lib/features/loading-indicator/loading-indicator.component.d.ts +0 -11
  278. package/lib/features/loading-indicator/loading-indicator.component.d.ts.map +0 -1
  279. package/lib/features/login/login-dialog.component.d.ts +0 -30
  280. package/lib/features/login/login-dialog.component.d.ts.map +0 -1
  281. package/lib/features/messaging/growler.component.d.ts +0 -19
  282. package/lib/features/messaging/growler.component.d.ts.map +0 -1
  283. package/lib/features/messaging/growler.model.d.ts +0 -8
  284. package/lib/features/messaging/growler.model.d.ts.map +0 -1
  285. package/lib/features/messaging/growler.module.d.ts +0 -10
  286. package/lib/features/messaging/growler.module.d.ts.map +0 -1
  287. package/lib/features/messaging/growler.service.d.ts +0 -18
  288. package/lib/features/messaging/growler.service.d.ts.map +0 -1
  289. package/lib/features/messaging/logger.service.d.ts +0 -27
  290. package/lib/features/messaging/logger.service.d.ts.map +0 -1
  291. package/lib/features/multi-action-button/multi-action-button.component.d.ts +0 -13
  292. package/lib/features/multi-action-button/multi-action-button.component.d.ts.map +0 -1
  293. package/lib/features/no-items/no-items.component.d.ts +0 -19
  294. package/lib/features/no-items/no-items.component.d.ts.map +0 -1
  295. package/lib/features/overrides/overrides.component.d.ts +0 -33
  296. package/lib/features/overrides/overrides.component.d.ts.map +0 -1
  297. package/lib/features/overrides/overrides.service.d.ts +0 -18
  298. package/lib/features/overrides/overrides.service.d.ts.map +0 -1
  299. package/lib/features/preview-list/preview-list.component.d.ts +0 -34
  300. package/lib/features/preview-list/preview-list.component.d.ts.map +0 -1
  301. package/lib/features/preview-selections/preview-selections.component.d.ts +0 -39
  302. package/lib/features/preview-selections/preview-selections.component.d.ts.map +0 -1
  303. package/lib/features/progress-meter/progress-meter.component.d.ts +0 -19
  304. package/lib/features/progress-meter/progress-meter.component.d.ts.map +0 -1
  305. package/lib/features/progress-wizard/progress-wizard.component.d.ts +0 -31
  306. package/lib/features/progress-wizard/progress-wizard.component.d.ts.map +0 -1
  307. package/lib/features/projectable-forms/api-session/api-session-form.component.d.ts +0 -50
  308. package/lib/features/projectable-forms/api-session/api-session-form.component.d.ts.map +0 -1
  309. package/lib/features/projectable-forms/api-session/api-session-form.service.d.ts +0 -27
  310. package/lib/features/projectable-forms/api-session/api-session-form.service.d.ts.map +0 -1
  311. package/lib/features/projectable-forms/auth-policy/auth-policy-form.component.d.ts +0 -74
  312. package/lib/features/projectable-forms/auth-policy/auth-policy-form.component.d.ts.map +0 -1
  313. package/lib/features/projectable-forms/auth-policy/auth-policy-form.service.d.ts +0 -38
  314. package/lib/features/projectable-forms/auth-policy/auth-policy-form.service.d.ts.map +0 -1
  315. package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.d.ts +0 -80
  316. package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.d.ts.map +0 -1
  317. package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.service.d.ts +0 -37
  318. package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.service.d.ts.map +0 -1
  319. package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.d.ts +0 -62
  320. package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.d.ts.map +0 -1
  321. package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.service.d.ts +0 -28
  322. package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.service.d.ts.map +0 -1
  323. package/lib/features/projectable-forms/config-type/config-type-form.component.d.ts +0 -63
  324. package/lib/features/projectable-forms/config-type/config-type-form.component.d.ts.map +0 -1
  325. package/lib/features/projectable-forms/config-type/config-type-form.service.d.ts +0 -27
  326. package/lib/features/projectable-forms/config-type/config-type-form.service.d.ts.map +0 -1
  327. package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts +0 -62
  328. package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts.map +0 -1
  329. package/lib/features/projectable-forms/configuration/configuration.service.d.ts +0 -33
  330. package/lib/features/projectable-forms/configuration/configuration.service.d.ts.map +0 -1
  331. package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts +0 -53
  332. package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts.map +0 -1
  333. package/lib/features/projectable-forms/edge-router/edge-router-form.service.d.ts +0 -29
  334. package/lib/features/projectable-forms/edge-router/edge-router-form.service.d.ts.map +0 -1
  335. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts +0 -54
  336. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts.map +0 -1
  337. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.d.ts +0 -40
  338. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.d.ts.map +0 -1
  339. package/lib/features/projectable-forms/form-field-container/form-field-container.component.d.ts +0 -29
  340. package/lib/features/projectable-forms/form-field-container/form-field-container.component.d.ts.map +0 -1
  341. package/lib/features/projectable-forms/form-field-toggle/form-field-toggle.component.d.ts +0 -15
  342. package/lib/features/projectable-forms/form-field-toggle/form-field-toggle.component.d.ts.map +0 -1
  343. package/lib/features/projectable-forms/form-header/form-header.component.d.ts +0 -38
  344. package/lib/features/projectable-forms/form-header/form-header.component.d.ts.map +0 -1
  345. package/lib/features/projectable-forms/identity/identity-form.component.d.ts +0 -93
  346. package/lib/features/projectable-forms/identity/identity-form.component.d.ts.map +0 -1
  347. package/lib/features/projectable-forms/identity/identity-form.service.d.ts +0 -20
  348. package/lib/features/projectable-forms/identity/identity-form.service.d.ts.map +0 -1
  349. package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.d.ts +0 -97
  350. package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.d.ts.map +0 -1
  351. package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.service.d.ts +0 -21
  352. package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.service.d.ts.map +0 -1
  353. package/lib/features/projectable-forms/posture-check/posture-check-form.component.d.ts +0 -134
  354. package/lib/features/projectable-forms/posture-check/posture-check-form.component.d.ts.map +0 -1
  355. package/lib/features/projectable-forms/posture-check/posture-check-form.service.d.ts +0 -23
  356. package/lib/features/projectable-forms/posture-check/posture-check-form.service.d.ts.map +0 -1
  357. package/lib/features/projectable-forms/projectable-form.class.d.ts +0 -92
  358. package/lib/features/projectable-forms/projectable-form.class.d.ts.map +0 -1
  359. package/lib/features/projectable-forms/service/service-form.component.d.ts +0 -70
  360. package/lib/features/projectable-forms/service/service-form.component.d.ts.map +0 -1
  361. package/lib/features/projectable-forms/service/service-form.service.d.ts +0 -123
  362. package/lib/features/projectable-forms/service/service-form.service.d.ts.map +0 -1
  363. package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts +0 -173
  364. package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts.map +0 -1
  365. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts +0 -53
  366. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts.map +0 -1
  367. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.d.ts +0 -38
  368. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.d.ts.map +0 -1
  369. package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts +0 -55
  370. package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts.map +0 -1
  371. package/lib/features/projectable-forms/service-policy/service-policy-form.service.d.ts +0 -48
  372. package/lib/features/projectable-forms/service-policy/service-policy-form.service.d.ts.map +0 -1
  373. package/lib/features/projectable-forms/session/session-form.component.d.ts +0 -63
  374. package/lib/features/projectable-forms/session/session-form.component.d.ts.map +0 -1
  375. package/lib/features/projectable-forms/session/session-form.service.d.ts +0 -23
  376. package/lib/features/projectable-forms/session/session-form.service.d.ts.map +0 -1
  377. package/lib/features/projectable-forms/terminator/terminator-form.component.d.ts +0 -58
  378. package/lib/features/projectable-forms/terminator/terminator-form.component.d.ts.map +0 -1
  379. package/lib/features/projectable-forms/terminator/terminator-form.service.d.ts +0 -33
  380. package/lib/features/projectable-forms/terminator/terminator-form.service.d.ts.map +0 -1
  381. package/lib/features/projectable-forms/transit-router/transit-router-form.component.d.ts +0 -50
  382. package/lib/features/projectable-forms/transit-router/transit-router-form.component.d.ts.map +0 -1
  383. package/lib/features/projectable-forms/transit-router/transit-router-form.service.d.ts +0 -27
  384. package/lib/features/projectable-forms/transit-router/transit-router-form.service.d.ts.map +0 -1
  385. package/lib/features/qr-code/qr-code.component.d.ts +0 -45
  386. package/lib/features/qr-code/qr-code.component.d.ts.map +0 -1
  387. package/lib/features/quick-add/quick-add.component.d.ts +0 -15
  388. package/lib/features/quick-add/quick-add.component.d.ts.map +0 -1
  389. package/lib/features/reset-enrollment/reset-enrollment.component.d.ts +0 -27
  390. package/lib/features/reset-enrollment/reset-enrollment.component.d.ts.map +0 -1
  391. package/lib/features/reset-enrollment/reset-enrollment.service.d.ts +0 -13
  392. package/lib/features/reset-enrollment/reset-enrollment.service.d.ts.map +0 -1
  393. package/lib/features/side-modal/side-modal.component.d.ts +0 -15
  394. package/lib/features/side-modal/side-modal.component.d.ts.map +0 -1
  395. package/lib/features/side-navigator/side-navigator.component.d.ts +0 -33
  396. package/lib/features/side-navigator/side-navigator.component.d.ts.map +0 -1
  397. package/lib/features/sidebars/side-navbar/side-navbar.component.d.ts +0 -16
  398. package/lib/features/sidebars/side-navbar/side-navbar.component.d.ts.map +0 -1
  399. package/lib/features/tag-selector/tag-selector.component.d.ts +0 -59
  400. package/lib/features/tag-selector/tag-selector.component.d.ts.map +0 -1
  401. package/lib/features/visualizer/identity-service-path/identity-service-path.component.d.ts +0 -54
  402. package/lib/features/visualizer/identity-service-path/identity-service-path.component.d.ts.map +0 -1
  403. package/lib/features/visualizer/identity-service-path/identity-service-path.helper.d.ts +0 -21
  404. package/lib/features/visualizer/identity-service-path/identity-service-path.helper.d.ts.map +0 -1
  405. package/lib/features/visualizer/network-visualizer/network-visualizer.component.d.ts +0 -146
  406. package/lib/features/visualizer/network-visualizer/network-visualizer.component.d.ts.map +0 -1
  407. package/lib/features/visualizer/network-visualizer/network-visualizer.helper.d.ts +0 -172
  408. package/lib/features/visualizer/network-visualizer/network-visualizer.helper.d.ts.map +0 -1
  409. package/lib/features/visualizer/network-visualizer/network-visualizer.treenodeprocessor.d.ts +0 -35
  410. package/lib/features/visualizer/network-visualizer/network-visualizer.treenodeprocessor.d.ts.map +0 -1
  411. package/lib/features/visualizer/visualizer-service.class.d.ts +0 -10
  412. package/lib/features/visualizer/visualizer-service.class.d.ts.map +0 -1
  413. package/lib/models/api-session.d.ts +0 -18
  414. package/lib/models/api-session.d.ts.map +0 -1
  415. package/lib/models/auth-policy.d.ts +0 -8
  416. package/lib/models/auth-policy.d.ts.map +0 -1
  417. package/lib/models/certificate-authority.d.ts +0 -14
  418. package/lib/models/certificate-authority.d.ts.map +0 -1
  419. package/lib/models/config-type.d.ts +0 -7
  420. package/lib/models/config-type.d.ts.map +0 -1
  421. package/lib/models/config.d.ts +0 -7
  422. package/lib/models/config.d.ts.map +0 -1
  423. package/lib/models/edge-router-policy.d.ts +0 -8
  424. package/lib/models/edge-router-policy.d.ts.map +0 -1
  425. package/lib/models/edge-router.d.ts +0 -10
  426. package/lib/models/edge-router.d.ts.map +0 -1
  427. package/lib/models/identity.d.ts +0 -16
  428. package/lib/models/identity.d.ts.map +0 -1
  429. package/lib/models/jwt-signer.d.ts +0 -17
  430. package/lib/models/jwt-signer.d.ts.map +0 -1
  431. package/lib/models/posture-check.d.ts +0 -17
  432. package/lib/models/posture-check.d.ts.map +0 -1
  433. package/lib/models/service-edge-router-policy.d.ts +0 -8
  434. package/lib/models/service-edge-router-policy.d.ts.map +0 -1
  435. package/lib/models/service-policy.d.ts +0 -10
  436. package/lib/models/service-policy.d.ts.map +0 -1
  437. package/lib/models/service.d.ts +0 -9
  438. package/lib/models/service.d.ts.map +0 -1
  439. package/lib/models/session.d.ts +0 -17
  440. package/lib/models/session.d.ts.map +0 -1
  441. package/lib/models/terminator.d.ts +0 -11
  442. package/lib/models/terminator.d.ts.map +0 -1
  443. package/lib/pages/api-sessions/api-sessions-page.component.d.ts +0 -30
  444. package/lib/pages/api-sessions/api-sessions-page.component.d.ts.map +0 -1
  445. package/lib/pages/api-sessions/api-sessions-page.service.d.ts +0 -31
  446. package/lib/pages/api-sessions/api-sessions-page.service.d.ts.map +0 -1
  447. package/lib/pages/attributes/attributes.component.d.ts +0 -31
  448. package/lib/pages/attributes/attributes.component.d.ts.map +0 -1
  449. package/lib/pages/auth-policies/auth-policies-page.component.d.ts +0 -29
  450. package/lib/pages/auth-policies/auth-policies-page.component.d.ts.map +0 -1
  451. package/lib/pages/auth-policies/auth-policies-page.service.d.ts +0 -34
  452. package/lib/pages/auth-policies/auth-policies-page.service.d.ts.map +0 -1
  453. package/lib/pages/callback/callback.component.d.ts +0 -22
  454. package/lib/pages/callback/callback.component.d.ts.map +0 -1
  455. package/lib/pages/certificate-authorities/certificate-authorities-page.component.d.ts +0 -30
  456. package/lib/pages/certificate-authorities/certificate-authorities-page.component.d.ts.map +0 -1
  457. package/lib/pages/certificate-authorities/certificate-authorities-page.service.d.ts +0 -35
  458. package/lib/pages/certificate-authorities/certificate-authorities-page.service.d.ts.map +0 -1
  459. package/lib/pages/config-types/config-types-page.component.d.ts +0 -31
  460. package/lib/pages/config-types/config-types-page.component.d.ts.map +0 -1
  461. package/lib/pages/config-types/config-types-page.service.d.ts +0 -29
  462. package/lib/pages/config-types/config-types-page.service.d.ts.map +0 -1
  463. package/lib/pages/configurations/configurations-page.component.d.ts +0 -30
  464. package/lib/pages/configurations/configurations-page.component.d.ts.map +0 -1
  465. package/lib/pages/configurations/configurations-page.service.d.ts +0 -80
  466. package/lib/pages/configurations/configurations-page.service.d.ts.map +0 -1
  467. package/lib/pages/edge-router-policies/edge-router-policies-page.component.d.ts +0 -33
  468. package/lib/pages/edge-router-policies/edge-router-policies-page.component.d.ts.map +0 -1
  469. package/lib/pages/edge-router-policies/edge-router-policies-page.service.d.ts +0 -63
  470. package/lib/pages/edge-router-policies/edge-router-policies-page.service.d.ts.map +0 -1
  471. package/lib/pages/edge-routers/edge-routers-page.component.d.ts +0 -36
  472. package/lib/pages/edge-routers/edge-routers-page.component.d.ts.map +0 -1
  473. package/lib/pages/edge-routers/edge-routers-page.service.d.ts +0 -51
  474. package/lib/pages/edge-routers/edge-routers-page.service.d.ts.map +0 -1
  475. package/lib/pages/geolocate/geolocate.component.d.ts +0 -32
  476. package/lib/pages/geolocate/geolocate.component.d.ts.map +0 -1
  477. package/lib/pages/identities/identities-page.component.d.ts +0 -40
  478. package/lib/pages/identities/identities-page.component.d.ts.map +0 -1
  479. package/lib/pages/identities/identities-page.service.d.ts +0 -64
  480. package/lib/pages/identities/identities-page.service.d.ts.map +0 -1
  481. package/lib/pages/jwt-signers/jwt-signers-page.component.d.ts +0 -34
  482. package/lib/pages/jwt-signers/jwt-signers-page.component.d.ts.map +0 -1
  483. package/lib/pages/jwt-signers/jwt-signers-page.service.d.ts +0 -31
  484. package/lib/pages/jwt-signers/jwt-signers-page.service.d.ts.map +0 -1
  485. package/lib/pages/posture-checks/posture-checks-page.component.d.ts +0 -29
  486. package/lib/pages/posture-checks/posture-checks-page.component.d.ts.map +0 -1
  487. package/lib/pages/posture-checks/posture-checks-page.service.d.ts +0 -28
  488. package/lib/pages/posture-checks/posture-checks-page.service.d.ts.map +0 -1
  489. package/lib/pages/profile/profile.component.d.ts +0 -17
  490. package/lib/pages/profile/profile.component.d.ts.map +0 -1
  491. package/lib/pages/service-edge-router-policies/service-edge-router-policies-page.component.d.ts +0 -33
  492. package/lib/pages/service-edge-router-policies/service-edge-router-policies-page.component.d.ts.map +0 -1
  493. package/lib/pages/service-edge-router-policies/service-edge-router-policies-page.service.d.ts +0 -57
  494. package/lib/pages/service-edge-router-policies/service-edge-router-policies-page.service.d.ts.map +0 -1
  495. package/lib/pages/service-policies/service-policies-page.component.d.ts +0 -34
  496. package/lib/pages/service-policies/service-policies-page.component.d.ts.map +0 -1
  497. package/lib/pages/service-policies/service-policies-page.service.d.ts +0 -63
  498. package/lib/pages/service-policies/service-policies-page.service.d.ts.map +0 -1
  499. package/lib/pages/services/services-page.component.d.ts +0 -42
  500. package/lib/pages/services/services-page.component.d.ts.map +0 -1
  501. package/lib/pages/services/services-page.service.d.ts +0 -69
  502. package/lib/pages/services/services-page.service.d.ts.map +0 -1
  503. package/lib/pages/sessions/sessions-page.component.d.ts +0 -30
  504. package/lib/pages/sessions/sessions-page.component.d.ts.map +0 -1
  505. package/lib/pages/sessions/sessions-page.service.d.ts +0 -30
  506. package/lib/pages/sessions/sessions-page.service.d.ts.map +0 -1
  507. package/lib/pages/settings/settings.component.d.ts +0 -23
  508. package/lib/pages/settings/settings.component.d.ts.map +0 -1
  509. package/lib/pages/terminators/terminators-page.component.d.ts +0 -29
  510. package/lib/pages/terminators/terminators-page.component.d.ts.map +0 -1
  511. package/lib/pages/terminators/terminators-page.service.d.ts +0 -32
  512. package/lib/pages/terminators/terminators-page.service.d.ts.map +0 -1
  513. package/lib/pages/transit-routers/transit-routers-page.component.d.ts +0 -35
  514. package/lib/pages/transit-routers/transit-routers-page.component.d.ts.map +0 -1
  515. package/lib/pages/transit-routers/transit-routers-page.service.d.ts +0 -50
  516. package/lib/pages/transit-routers/transit-routers-page.service.d.ts.map +0 -1
  517. package/lib/safe.pipe.d.ts +0 -11
  518. package/lib/safe.pipe.d.ts.map +0 -1
  519. package/lib/services/auth.service.d.ts +0 -21
  520. package/lib/services/auth.service.d.ts.map +0 -1
  521. package/lib/services/console-events.service.d.ts +0 -12
  522. package/lib/services/console-events.service.d.ts.map +0 -1
  523. package/lib/services/csv-download.service.d.ts +0 -11
  524. package/lib/services/csv-download.service.d.ts.map +0 -1
  525. package/lib/services/deactivate-guard.service.d.ts +0 -14
  526. package/lib/services/deactivate-guard.service.d.ts.map +0 -1
  527. package/lib/services/login-service.class.d.ts +0 -30
  528. package/lib/services/login-service.class.d.ts.map +0 -1
  529. package/lib/services/node-data.service.d.ts +0 -38
  530. package/lib/services/node-data.service.d.ts.map +0 -1
  531. package/lib/services/noop-login.service.d.ts +0 -22
  532. package/lib/services/noop-login.service.d.ts.map +0 -1
  533. package/lib/services/schema.service.d.ts +0 -63
  534. package/lib/services/schema.service.d.ts.map +0 -1
  535. package/lib/services/settings-service.class.d.ts +0 -36
  536. package/lib/services/settings-service.class.d.ts.map +0 -1
  537. package/lib/services/settings.service.d.ts +0 -20
  538. package/lib/services/settings.service.d.ts.map +0 -1
  539. package/lib/services/tab-name.service.d.ts +0 -20
  540. package/lib/services/tab-name.service.d.ts.map +0 -1
  541. package/lib/services/validation.service.d.ts +0 -20
  542. package/lib/services/validation.service.d.ts.map +0 -1
  543. package/lib/services/ziti-controller-data.service.d.ts +0 -36
  544. package/lib/services/ziti-controller-data.service.d.ts.map +0 -1
  545. package/lib/services/ziti-data.service.d.ts +0 -49
  546. package/lib/services/ziti-data.service.d.ts.map +0 -1
  547. package/lib/services/ziti-domain-controller.service.d.ts +0 -13
  548. package/lib/services/ziti-domain-controller.service.d.ts.map +0 -1
  549. package/lib/shared/list-page-component.class.d.ts +0 -57
  550. package/lib/shared/list-page-component.class.d.ts.map +0 -1
  551. package/lib/shared/list-page-service.class.d.ts +0 -81
  552. package/lib/shared/list-page-service.class.d.ts.map +0 -1
  553. package/lib/urls.d.ts +0 -34
  554. package/lib/urls.d.ts.map +0 -1
  555. package/lib/zac-routing.module.d.ts +0 -8
  556. package/lib/zac-routing.module.d.ts.map +0 -1
  557. package/lib/ziti-console-lib.module.d.ts +0 -121
  558. package/lib/ziti-console-lib.module.d.ts.map +0 -1
  559. package/lib/ziti-console.constants.d.ts +0 -5
  560. package/lib/ziti-console.constants.d.ts.map +0 -1
  561. package/openziti-ziti-console-lib.d.ts.map +0 -1
  562. package/public-api.d.ts +0 -127
  563. package/public-api.d.ts.map +0 -1
@@ -1,591 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class Identity {
4
- constructor() {
5
- this.rootNode = 'No';
6
- this.children = [];
7
- this.contextMenu = 'Yes';
8
- }
9
- }
10
- export class Service {
11
- constructor() {
12
- this.rootNode = 'No';
13
- this.children = [];
14
- this.contextMenu = 'Yes';
15
- }
16
- }
17
- export class Config {
18
- constructor() {
19
- this.rootNode = 'No';
20
- this.children = [];
21
- this.contextMenu = 'Yes';
22
- }
23
- }
24
- export class Group {
25
- constructor(idv, s, g) {
26
- this.id = idv;
27
- this.name = s;
28
- this.group = g;
29
- this.type = 'Group';
30
- this.children = [];
31
- }
32
- }
33
- export class ServicePolicy {
34
- constructor() {
35
- this.rootNode = 'No';
36
- this.children = [];
37
- this.contextMenu = 'Yes';
38
- }
39
- }
40
- export class Attribute {
41
- constructor() {
42
- this.children = [];
43
- }
44
- }
45
- export class ERPolicy {
46
- constructor() {
47
- this.rootNode = 'No';
48
- this.children = [];
49
- this.contextMenu = 'Yes';
50
- }
51
- }
52
- export class ServiceERPolicy {
53
- constructor() {
54
- this.rootNode = 'No';
55
- this.children = [];
56
- this.contextMenu = 'Yes';
57
- }
58
- }
59
- export class ERouter {
60
- constructor() {
61
- this.rootNode = 'No';
62
- this.children = [];
63
- this.contextMenu = 'Yes';
64
- }
65
- }
66
- export class Children {
67
- constructor() {
68
- this.rootNode = 'No';
69
- this.firstChild = 'No';
70
- this.type = 'Children';
71
- this.children = [];
72
- }
73
- }
74
- export class NetworkVisualizerHelper {
75
- constructor() {
76
- this.uniqIId = 0;
77
- }
78
- createUniqId() {
79
- return ++this.uniqIId;
80
- }
81
- createEdgeRouterNode(er, isRootNode = 'Yes') {
82
- const erOb = new ERouter();
83
- // erOb.id = createId();
84
- erOb.uuid = er.id;
85
- erOb.name = er.name;
86
- erOb.verified = er.isVerified ? 'Yes' : 'No';
87
- //erOb.version = er.productVersion;
88
- erOb.online = er.isOnline ? 'Yes' : 'No';
89
- erOb.disabled = er.disabled ? 'Yes' : 'No';
90
- erOb.type = 'Edge Router';
91
- erOb.rootNode = isRootNode;
92
- erOb.tunnelerEnabled = er.tunnelerEnabled ? er.tunnelerEnabled : 'No';
93
- erOb.syncStatus = er.syncStatus ? er.syncStatus : 'No';
94
- erOb.createdAt = er.createdAt;
95
- erOb.updatedAt = er.updatedAt;
96
- return erOb;
97
- }
98
- createServiceEdgeRouterPolicyNode(rawObj, isRootNode = 'Yes') {
99
- const serviceerpolicy = new ServiceERPolicy();
100
- // serviceerpolicy.id = createId();
101
- serviceerpolicy.uuid = rawObj.id;
102
- serviceerpolicy.name = rawObj.name;
103
- serviceerpolicy.type = 'Service Router Policy';
104
- serviceerpolicy.rootNode = isRootNode;
105
- return serviceerpolicy;
106
- }
107
- createEdgeRouterPolicyNode(rawObj, isRootNode = 'Yes') {
108
- const erpolicy = new ERPolicy();
109
- // erpolicy.id = createId();
110
- erpolicy.uuid = rawObj.id;
111
- erpolicy.name = rawObj.name;
112
- erpolicy.type = 'Edge Router Policy';
113
- erpolicy.rootNode = isRootNode;
114
- erpolicy.isSystem = rawObj.isSystem;
115
- erpolicy.semantic = rawObj.semantic;
116
- return erpolicy;
117
- }
118
- createServicePolicyNode(rawObj, isRootNode = 'Yes') {
119
- const bindGrp = new Group(43423, 'Bind-Policies', 'Bind Service Policy');
120
- const dialGrp = new Group(43545, 'Dial-Policies', 'Dial Service Policy');
121
- const spolicy = new ServicePolicy();
122
- // spolicy.id = createId();
123
- spolicy.id = 87956;
124
- spolicy.uuid = rawObj.id;
125
- spolicy.name = rawObj.name;
126
- spolicy.type = 'Service Policy';
127
- spolicy.rootNode = isRootNode;
128
- spolicy.clickProcess = "Not Yet";
129
- if (rawObj.type === 'Bind') {
130
- bindGrp.children.push(spolicy);
131
- return bindGrp;
132
- }
133
- else {
134
- dialGrp.children.push(spolicy);
135
- return dialGrp;
136
- }
137
- }
138
- createIdentityNode(rawObj, isRootNode = 'Yes') {
139
- const endpoint = new Identity();
140
- endpoint.rootNode = isRootNode;
141
- // endpoint.id = createId();
142
- endpoint.id = 5432;
143
- endpoint.uuid = rawObj.id;
144
- endpoint.name = rawObj.name;
145
- endpoint.online = rawObj.hasApiSession === true ? 'Yes' : 'No';
146
- endpoint.type = 'Identity';
147
- endpoint.createdAt = rawObj.createdAt;
148
- endpoint.updatedAt = rawObj.updatedAt;
149
- endpoint.status = rawObj.sdkInfo !== null ? 'Registered' : 'Not Registered';
150
- if (rawObj.sdkInfo) {
151
- endpoint.os = rawObj.sdkInfo.type ? rawObj.sdkInfo.type : rawObj.sdkInfo.appId;
152
- endpoint.osVersion = rawObj.sdkInfo.version;
153
- }
154
- if (rawObj.authPolicy && rawObj.authPolicy.name.includes("BrowZer")) {
155
- endpoint.type = 'BrowZer Identity';
156
- }
157
- return endpoint;
158
- }
159
- createServiceNode(rawObj, isRootNode = 'Yes') {
160
- const serviceobj = new Service();
161
- // serviceobj.id = createId();
162
- serviceobj.name = rawObj.name;
163
- serviceobj.uuid = rawObj.id;
164
- serviceobj.type = 'Service';
165
- serviceobj.rootNode = isRootNode;
166
- const attributeswithName = [];
167
- rawObj && rawObj.roleAttributes && rawObj.roleAttributes.find((srattr) => {
168
- attributeswithName.push(srattr);
169
- });
170
- return serviceobj;
171
- }
172
- getResourceTreeObj(networkName, networkStatus, services, identities, servicePolicies, edgerouters, edgeRouterPolicies, serviceEdgeRouterPolicies,
173
- // networkProductVersion,
174
- services_totalCount, identities_totalCount, edgerouters_totalCount, service_policies_totalCount, edge_router_policies_totalCount, service_router_policies_totalCount, uniqId, logger, ...args) {
175
- this.uniqIId = uniqId;
176
- function createId() {
177
- ++uniqId;
178
- // ++this.uniqIId;
179
- return uniqId;
180
- }
181
- class RootJson {
182
- constructor() {
183
- this.id = createId();
184
- this.lastId = 0;
185
- this.children = [];
186
- this.contextMenu = 'Yes';
187
- this.type = 'Network';
188
- this.rootNode = 'No';
189
- }
190
- }
191
- const rootJson = new RootJson();
192
- rootJson.name = 'Network';
193
- rootJson.status = 'Provisioned';
194
- function processIdentitiesForTree(identitiesChildren, identities, nx, ny) {
195
- if (args[2] === false)
196
- return identitiesChildren;
197
- const obj_array = [];
198
- for (let j = nx; j < ny; j++) {
199
- const endpoint = new Identity();
200
- endpoint.rootNode = 'Yes';
201
- endpoint.id = createId();
202
- endpoint.uuid = identities[j].id;
203
- endpoint.name = identities[j].name;
204
- endpoint.online = identities[j].hasApiSession === true ? 'Yes' : 'No';
205
- endpoint.type = 'Identity';
206
- endpoint.createdAt = identities[j].createdAt;
207
- endpoint.updatedAt = identities[j].updatedAt;
208
- endpoint.status = identities[j].sdkInfo !== null ? 'Registered' : 'Not Registered';
209
- if (identities[j].sdkInfo) {
210
- endpoint.os = identities[j].sdkInfo.type ? identities[j].sdkInfo.type : identities[j].sdkInfo.appId;
211
- endpoint.osVersion = identities[j].sdkInfo.version;
212
- }
213
- if (identities[j].authPolicy && identities[j].authPolicy.name.includes("BrowZer")) {
214
- endpoint.type = 'BrowZer Identity';
215
- }
216
- obj_array.push(endpoint);
217
- } // end of main for loop
218
- return grouping('Identitie', identitiesChildren, obj_array);
219
- }
220
- function subGrouping(name, mainGroup) {
221
- const pageSize = 25;
222
- mainGroup.children.sort(function (a, b) {
223
- return a.name.localeCompare(b.name);
224
- });
225
- if (mainGroup.children.length > pageSize) {
226
- const children = [];
227
- let pageNo = 0;
228
- for (let i = 0; i < mainGroup.children.length; i++) {
229
- const lastElement = (i + pageSize) < mainGroup.children.length ? (i + pageSize) : (mainGroup.children.length);
230
- const nameS = name + 's [' +
231
- mainGroup.children[i].name.substring(0, 4) +
232
- ' - ' +
233
- mainGroup.children[lastElement - 1].name.substring(0, 4) +
234
- ']';
235
- const chld = new Group(createId(), nameS, name + ' name starts with ' +
236
- mainGroup.children[i].name.substring(0, 4) +
237
- ' To ' +
238
- mainGroup.children[lastElement - 1].name.substring(0, 4));
239
- let j = 0;
240
- for (j = i; j < lastElement; j++) {
241
- i++;
242
- chld.children.push(mainGroup.children[j]);
243
- }
244
- --i;
245
- chld.name = chld.name + ' (' + chld.children.length + ')';
246
- children.push(chld);
247
- }
248
- mainGroup.children = children;
249
- }
250
- return mainGroup;
251
- }
252
- function grouping(name, children, objectsArray) {
253
- let protocolRDPGrp, protocolHTTPSGrp, protocolHTTPGrp, protocolFTPGrp, unregisteredGrp;
254
- if (name === 'Service') {
255
- protocolRDPGrp = new Group(createId(), 'Services [protocol-RDP]', 'Services created for RDP protocol');
256
- protocolHTTPSGrp = new Group(createId(), 'Services [protocol-HTTPS]', 'Service created for HTTPS protocol');
257
- protocolHTTPGrp = new Group(createId(), 'Services [protocol-HTTP]', 'Service created for HTTP protocol');
258
- protocolFTPGrp = new Group(createId(), 'Services [protocol-FTP]', 'Service created for FTP protocol');
259
- }
260
- if (name === 'Identitie') {
261
- unregisteredGrp = new Group(createId(), 'Identities[Unregistered]', 'Identities that are not registered');
262
- }
263
- const abcdGrp = new Group(createId(), name + 's [A-D]', name + ' name starts with A to D');
264
- const efghGrp = new Group(createId(), name + 's [E-H]', name + ' name starts with E to H');
265
- const ijklGrp = new Group(createId(), name + 's [I-L]', name + ' name starts with I to L');
266
- const mnopGrp = new Group(createId(), name + 's [M-P]', name + ' name starts with M to P');
267
- const qrstGrp = new Group(createId(), name + 's [Q-T]', name + ' name starts with Q to T');
268
- const uvwxGrp = new Group(createId(), name + 's [U-X]', name + ' name starts with U to X');
269
- const yzGrp = new Group(createId(), name + 's [Y-Z]', name + ' name starts with Y and Z');
270
- const oneTo9Grp = new Group(createId(), name + 's [1-9]', name + ' name starts with 0 to 9');
271
- const specialCharGrp = new Group(createId(), name + 's [others]', name + ' name starts with special characters');
272
- for (let i = 0; i < objectsArray.length; i++) {
273
- const obj = objectsArray[i];
274
- const cha = obj.name.charAt(0).toLowerCase();
275
- if (name === 'Identitie' && obj.status === 'Not Registered') {
276
- unregisteredGrp.children.push(obj);
277
- }
278
- else if (name === 'Service' && obj.protocol === 'rdp') {
279
- protocolRDPGrp.children.push(obj);
280
- }
281
- else if (name === 'Service' && obj.protocol === 'https') {
282
- protocolHTTPSGrp.children.push(obj);
283
- }
284
- else if (name === 'Service' && obj.protocol === 'http') {
285
- protocolHTTPGrp.children.push(obj);
286
- }
287
- else if (name === 'Service' && obj.protocol === 'ftp') {
288
- protocolFTPGrp.children.push(obj);
289
- }
290
- else if (cha === 'a' || cha === 'b' || cha === 'c' || cha === 'd') {
291
- abcdGrp.children.push(obj);
292
- }
293
- else if (cha === 'e' || cha === 'f' || cha === 'g' || cha === 'h') {
294
- efghGrp.children.push(obj);
295
- }
296
- else if (cha === 'i' || cha === 'j' || cha === 'k' || cha === 'l') {
297
- ijklGrp.children.push(obj);
298
- }
299
- else if (cha === 'm' || cha === 'n' || cha === 'o' || cha === 'p') {
300
- mnopGrp.children.push(obj);
301
- }
302
- else if (cha === 'q' || cha === 'r' || cha === 's' || cha === 't') {
303
- qrstGrp.children.push(obj);
304
- }
305
- else if (cha === 'u' || cha === 'v' || cha === 'w' || cha === 'x') {
306
- uvwxGrp.children.push(obj);
307
- }
308
- else if (cha === 'y' || cha === 'z') {
309
- yzGrp.children.push(obj);
310
- }
311
- else if (cha === '0' ||
312
- cha === '1' ||
313
- cha === '2' ||
314
- cha === '3' ||
315
- cha === '4' ||
316
- cha === '5' ||
317
- cha === '6' ||
318
- cha === '7' ||
319
- cha === '8' ||
320
- cha === '9') {
321
- oneTo9Grp.children.push(obj);
322
- }
323
- else {
324
- specialCharGrp.children.push(obj);
325
- }
326
- } // end main for loop
327
- if (name === 'Service') {
328
- if (protocolRDPGrp.children.length > 0) {
329
- protocolRDPGrp.children.sort(function (a, b) {
330
- return a.name.localeCompare(b.name);
331
- });
332
- protocolRDPGrp.name = protocolRDPGrp.name + '(' + protocolRDPGrp.children.length + ')';
333
- children.children.push(protocolRDPGrp);
334
- }
335
- if (protocolHTTPSGrp.children.length > 0) {
336
- protocolHTTPSGrp.children.sort(function (a, b) {
337
- return a.name.localeCompare(b.name);
338
- });
339
- protocolHTTPSGrp.name = protocolHTTPSGrp.name + '(' + protocolHTTPSGrp.children.length + ')';
340
- children.children.push(protocolHTTPSGrp);
341
- }
342
- if (protocolHTTPGrp.children.length > 0) {
343
- protocolHTTPGrp.children.sort(function (a, b) {
344
- return a.name.localeCompare(b.name);
345
- });
346
- protocolHTTPGrp.name = protocolHTTPGrp.name + '(' + protocolHTTPGrp.children.length + ')';
347
- children.children.push(protocolHTTPGrp);
348
- }
349
- if (protocolFTPGrp.children.length > 0) {
350
- protocolFTPGrp.children.sort(function (a, b) {
351
- return a.name.localeCompare(b.name);
352
- });
353
- protocolFTPGrp.name = protocolFTPGrp.name + '(' + protocolFTPGrp.children.length + ')';
354
- children.children.push(protocolFTPGrp);
355
- }
356
- }
357
- if (name === 'Identitie' && unregisteredGrp.children.length > 0) {
358
- unregisteredGrp.name = unregisteredGrp.name + '(' + unregisteredGrp.children.length + ')';
359
- children.children.push(unregisteredGrp);
360
- subGrouping(name, unregisteredGrp);
361
- }
362
- if (specialCharGrp.children.length > 0) {
363
- specialCharGrp.name = specialCharGrp.name + '(' + specialCharGrp.children.length + ')';
364
- children.children.push(specialCharGrp);
365
- subGrouping(name, specialCharGrp);
366
- }
367
- if (abcdGrp.children.length > 0) {
368
- abcdGrp.name = abcdGrp.name + '(' + abcdGrp.children.length + ')';
369
- children.children.push(abcdGrp);
370
- subGrouping(name, abcdGrp);
371
- }
372
- if (efghGrp.children.length > 0) {
373
- efghGrp.name = efghGrp.name + '(' + efghGrp.children.length + ')';
374
- children.children.push(efghGrp);
375
- subGrouping(name, efghGrp);
376
- }
377
- if (ijklGrp.children.length > 0) {
378
- ijklGrp.name = ijklGrp.name + '(' + ijklGrp.children.length + ')';
379
- children.children.push(ijklGrp);
380
- subGrouping(name, ijklGrp);
381
- }
382
- if (mnopGrp.children.length > 0) {
383
- mnopGrp.name = mnopGrp.name + '(' + mnopGrp.children.length + ')';
384
- children.children.push(mnopGrp);
385
- subGrouping(name, mnopGrp);
386
- }
387
- if (qrstGrp.children.length > 0) {
388
- qrstGrp.name = qrstGrp.name + '(' + qrstGrp.children.length + ')';
389
- children.children.push(qrstGrp);
390
- subGrouping(name, qrstGrp);
391
- }
392
- if (uvwxGrp.children.length > 0) {
393
- uvwxGrp.name = uvwxGrp.name + '(' + uvwxGrp.children.length + ')';
394
- children.children.push(uvwxGrp);
395
- subGrouping(name, uvwxGrp);
396
- }
397
- if (yzGrp.children.length > 0) {
398
- yzGrp.name = yzGrp.name + '(' + yzGrp.children.length + ')';
399
- children.children.push(yzGrp);
400
- subGrouping(name, yzGrp);
401
- }
402
- if (oneTo9Grp.children.length > 0) {
403
- oneTo9Grp.name = oneTo9Grp.name + '(' + oneTo9Grp.children.length + ')';
404
- children.children.push(oneTo9Grp);
405
- subGrouping(name, oneTo9Grp);
406
- }
407
- return children;
408
- }
409
- function processServicePoliciesForTree(servicePolicyChildren, servicePolicies, nx, ny) {
410
- if (args[0] === false)
411
- return servicePolicyChildren;
412
- const bindGrp = new Group(createId(), 'Bind-Policies', 'Bind Service Policy');
413
- const dialGrp = new Group(createId(), 'Dial-Policies', 'Dial Service Policy');
414
- servicePolicies.forEach((sp) => {
415
- const spolicy = new ServicePolicy();
416
- spolicy.id = createId();
417
- spolicy.uuid = sp.id;
418
- spolicy.name = sp.name;
419
- spolicy.type = 'Service Policy';
420
- spolicy.rootNode = 'Yes';
421
- if (sp.type === 'Bind') {
422
- bindGrp.children.push(spolicy);
423
- }
424
- else {
425
- dialGrp.children.push(spolicy);
426
- }
427
- });
428
- bindGrp.name = bindGrp.name + '(' + bindGrp.children.length + ')';
429
- servicePolicyChildren.children.push(bindGrp);
430
- subGrouping('Bind-Policie', bindGrp);
431
- dialGrp.name = dialGrp.name + '(' + dialGrp.children.length + ')';
432
- servicePolicyChildren.children.push(dialGrp);
433
- subGrouping('Dial-Policie', dialGrp);
434
- return servicePolicyChildren;
435
- }
436
- function processServicesForTree(servicesChildren, services, nx, ny) {
437
- if (args[1] === false)
438
- return servicesChildren;
439
- const servicestree = [];
440
- for (let i = nx; i < ny; i++) {
441
- const serviceobj = new Service();
442
- serviceobj.id = createId();
443
- serviceobj.name = services[i].name;
444
- serviceobj.uuid = services[i].id;
445
- serviceobj.type = 'Service';
446
- serviceobj.rootNode = 'Yes';
447
- const attributeswithName = [];
448
- attributeswithName.push('@' + services[i].name);
449
- services[i] && services[i].roleAttributes && services[i].roleAttributes.find((srattr) => {
450
- attributeswithName.push(srattr);
451
- });
452
- let isItRDPProtocolAttr = false;
453
- let isItHTTPProtocolAttr = false;
454
- let isItHTTPSProtocolAttr = false;
455
- let isItFTPProtocolAttr = false;
456
- for (let k = 0; k < attributeswithName.length; k++) {
457
- const attrOb = new Attribute();
458
- attrOb.id = createId();
459
- attrOb.name = attributeswithName[k];
460
- attrOb.type = 'Service Attribute';
461
- const attName = attributeswithName[k].toLowerCase();
462
- if (isItRDPProtocolAttr === false && attName.includes('rdp')) {
463
- serviceobj.protocol = 'rdp';
464
- isItRDPProtocolAttr = true;
465
- }
466
- if (isItHTTPSProtocolAttr === false && attName.includes('https')) {
467
- serviceobj.protocol = 'https';
468
- isItHTTPSProtocolAttr = true;
469
- }
470
- if (isItHTTPSProtocolAttr === false && isItHTTPProtocolAttr === false && attName.includes('http')) {
471
- serviceobj.protocol = 'http';
472
- isItHTTPProtocolAttr = true;
473
- }
474
- if (isItFTPProtocolAttr === false && attName.includes('ftp')) {
475
- serviceobj.protocol = 'ftp';
476
- isItFTPProtocolAttr = true;
477
- }
478
- } // end inner for loop
479
- servicestree.push(serviceobj);
480
- } // end for loop
481
- return grouping('Service', servicesChildren, servicestree);
482
- } // end of processServicesForTree
483
- function processEdgeRouterPoliciesForTree(edgeRouterPoliciesChildren, edgeRouterPolicies, nx, ny) {
484
- if (args[4] === false)
485
- return edgeRouterPoliciesChildren;
486
- const policies_Array = [];
487
- for (let i = nx; i < ny; i++) {
488
- const erpolicy = new ERPolicy();
489
- erpolicy.id = createId();
490
- erpolicy.uuid = edgeRouterPolicies[i].id;
491
- erpolicy.name = edgeRouterPolicies[i].name;
492
- erpolicy.type = 'Edge Router Policy';
493
- erpolicy.rootNode = 'Yes';
494
- erpolicy.isSystem = edgeRouterPolicies[i].isSystem;
495
- erpolicy.semantic = edgeRouterPolicies[i].semantic;
496
- policies_Array.push(erpolicy);
497
- } // end of main for loop
498
- return grouping('Edge Router Policies', edgeRouterPoliciesChildren, policies_Array);
499
- } // end
500
- function processServiceEdgeRouterPoliciesForTree(serviceEdgeRouterPoliciesChildren, serviceEdgeRouterPolicies, nx, ny) {
501
- if (args[5] === false)
502
- return serviceEdgeRouterPoliciesChildren;
503
- for (let i = nx; i < ny; i++) {
504
- const serviceerpolicy = new ServiceERPolicy();
505
- serviceerpolicy.id = createId();
506
- serviceerpolicy.uuid = serviceEdgeRouterPolicies[i].id;
507
- serviceerpolicy.name = serviceEdgeRouterPolicies[i].name;
508
- serviceerpolicy.type = 'Service Router Policy';
509
- serviceerpolicy.rootNode = 'Yes';
510
- serviceEdgeRouterPoliciesChildren.children.push(serviceerpolicy);
511
- } // end of main for loop
512
- return serviceEdgeRouterPoliciesChildren;
513
- } // end
514
- function processEdgeRoutersForTree(routersChildren, edgerouters, nx, ny) {
515
- if (args[3] === false)
516
- return routersChildren;
517
- const er_objects = [];
518
- for (let i = nx; i < ny; i++) {
519
- const erOb = new ERouter();
520
- erOb.id = createId();
521
- const er = edgerouters[i];
522
- if (er) {
523
- erOb.uuid = er.id;
524
- erOb.name = er.name;
525
- erOb.verified = er.isVerified ? 'Yes' : 'No';
526
- //erOb.version = er.productVersion;
527
- erOb.online = er.isOnline ? 'Yes' : 'No';
528
- erOb.disabled = er.disabled ? 'Yes' : 'No';
529
- erOb.type = 'Edge Router';
530
- erOb.rootNode = 'Yes';
531
- erOb.tunnelerEnabled = er.tunnelerEnabled ? er.tunnelerEnabled : 'No';
532
- erOb.syncStatus = er.syncStatus ? er.syncStatus : 'No';
533
- erOb.createdAt = er.createdAt;
534
- erOb.updatedAt = er.updatedAt;
535
- er_objects.push(erOb);
536
- }
537
- } // end main for loop
538
- // return routersChildren;
539
- return grouping('Edge Router', routersChildren, er_objects);
540
- }
541
- // createId() generates node Id 1,2,3,4,5 for the following five nodes. this id is used to search capability.
542
- let servicPoliciesChildren = new Children();
543
- servicPoliciesChildren.id = createId();
544
- servicPoliciesChildren.firstChild = 'Yes';
545
- servicPoliciesChildren.name = 'Service Policies(' + service_policies_totalCount + ')';
546
- let servicesChildren = new Children();
547
- servicesChildren.id = createId();
548
- servicesChildren.firstChild = 'Yes';
549
- servicesChildren.name = 'Services(' + services_totalCount + ')';
550
- let identitiesChildren = new Children();
551
- identitiesChildren.id = createId();
552
- identitiesChildren.firstChild = 'Yes';
553
- identitiesChildren.name = 'Identities(' + identities_totalCount + ')';
554
- let edgerouterChildren = new Children();
555
- edgerouterChildren.id = createId();
556
- edgerouterChildren.firstChild = 'Yes';
557
- edgerouterChildren.name = 'Edge Routers(' + edgerouters_totalCount + ')';
558
- let edgeRouterPoliciesChildren = new Children();
559
- edgeRouterPoliciesChildren.id = createId();
560
- edgeRouterPoliciesChildren.firstChild = 'Yes';
561
- edgeRouterPoliciesChildren.name = 'Edge Router Policies(' + edge_router_policies_totalCount + ')';
562
- let serviceEdgeRouterPolicesChildren = new Children();
563
- serviceEdgeRouterPolicesChildren.id = createId();
564
- serviceEdgeRouterPolicesChildren.firstChild = 'Yes';
565
- serviceEdgeRouterPolicesChildren.name = 'Service Edge Router Policies(' + service_router_policies_totalCount + ')';
566
- servicesChildren = processServicesForTree(servicesChildren, services, 0, services.length);
567
- edgerouterChildren = processEdgeRoutersForTree(edgerouterChildren, edgerouters, 0, edgerouters.length);
568
- servicPoliciesChildren = processServicePoliciesForTree(servicPoliciesChildren, servicePolicies, 0, servicePolicies.length);
569
- edgeRouterPoliciesChildren = processEdgeRouterPoliciesForTree(edgeRouterPoliciesChildren, edgeRouterPolicies, 0, edgeRouterPolicies.length);
570
- identitiesChildren = processIdentitiesForTree(identitiesChildren, identities, 0, identities.length);
571
- //serviceRouterPolicies
572
- serviceEdgeRouterPolicesChildren = processServiceEdgeRouterPoliciesForTree(serviceEdgeRouterPolicesChildren, serviceEdgeRouterPolicies, 0, serviceEdgeRouterPolicies.length);
573
- rootJson.children.push(servicPoliciesChildren);
574
- rootJson.children.push(servicesChildren);
575
- rootJson.children.push(identitiesChildren);
576
- rootJson.children.push(edgerouterChildren);
577
- rootJson.children.push(edgeRouterPoliciesChildren);
578
- rootJson.children.push(serviceEdgeRouterPolicesChildren);
579
- rootJson.lastId = uniqId;
580
- return rootJson;
581
- }
582
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NetworkVisualizerHelper, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
583
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NetworkVisualizerHelper, providedIn: 'root' }); }
584
- }
585
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NetworkVisualizerHelper, decorators: [{
586
- type: Injectable,
587
- args: [{
588
- providedIn: 'root',
589
- }]
590
- }] });
591
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay12aXN1YWxpemVyLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy92aXN1YWxpemVyL25ldHdvcmstdmlzdWFsaXplci9uZXR3b3JrLXZpc3VhbGl6ZXIuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRzNDLE1BQU0sT0FBTyxRQUFRO0lBb0JqQjtRQUNJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxPQUFPO0lBb0JoQjtRQUNJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7Q0FDSjtBQUNELE1BQU0sT0FBTyxNQUFNO0lBUWpCO1FBQ0ksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDN0IsQ0FBQztDQUNGO0FBQ0QsTUFBTSxPQUFPLEtBQUs7SUFPZCxZQUFZLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztRQUNkLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxH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LEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRTtvQkFDakUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQzlCO3FCQUFNLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRTtvQkFDakUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQzlCO3FCQUFNLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRTtvQkFDakUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQzlCO3FCQUFNLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRTtvQkFDakUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQzlCO3FCQUFNLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRTtvQkFDakUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQzlCO3FCQUFNLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxFQUFFO29CQUNuQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDNUI7cUJBQU0sSUFDSCxHQUFHLEtBQUssR0FBRztvQkFDWCxHQUFHLEtBQUssR0FBRztvQkFDWCxHQUFHLEtBQUssR0FBRztvQkFDWCxHQUFHLEtBQUssR0FBRztv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dEUsZ0NBQWdDLEVBQ2hDLHlCQUF5QixFQUN6QixDQUFDLEVBQ0QseUJBQXlCLENBQUMsTUFBTSxDQUNuQyxDQUFDO1FBRUYsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUMvQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDM0MsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMzQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ25ELFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDekQsUUFBUSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFekIsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQzsrR0FobkJRLHVCQUF1QjttSEFBdkIsdUJBQXVCLGNBRnBCLE1BQU07OzRGQUVULHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG5leHBvcnQgY2xhc3MgSWRlbnRpdHkge1xuICAgIGlkO1xuICAgIHV1aWQ7XG4gICAgbmFtZTtcbiAgICBzdGF0dXM7XG4gICAgdHlwZTtcbiAgICByb290Tm9kZTtcbiAgICBzZXJ2ZXJFZ3Jlc3NQcm90b2NvbDtcbiAgICBzZXJ2ZXJFZ3Jlc3NIb3N0O1xuICAgIHNlcnZlckVncmVzc1BvcnQ7XG4gICAgcG9zdHVyZUNoZWNrcztcbiAgICBldmVudHM7XG4gICAgb3M7XG4gICAgdXRpbGl6YXRpb247XG4gICAgY2hpbGRyZW47XG4gICAgY29udGV4dE1lbnU7XG4gICAgb25saW5lO1xuICAgIG9zVmVyc2lvbjtcbiAgICBjcmVhdGVkQXQ7XG4gICAgdXBkYXRlZEF0O1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnJvb3ROb2RlID0gJ05vJztcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgICAgICB0aGlzLmNvbnRleHRNZW51ID0gJ1llcyc7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2VydmljZSB7XG4gICAgaWQ7XG4gICAgdXVpZDtcbiAgICBuYW1lO1xuICAgIGludGVyY2VwdF9ob3N0O1xuICAgIGludGVyY2VwdF9wb3J0O1xuICAgIGVuY3J5cHRlZDtcbiAgICByb290Tm9kZTtcbiAgICBzZXJ2ZXJFZ3Jlc3NIb3N0O1xuICAgIHNlcnZlckVncmVzc1BvcnQ7XG4gICAgc3RhdHVzO1xuICAgIHByb3RvY29sO1xuICAgIHR5cGU7XG4gICAgY2hpbGRyZW47XG4gICAgYXR0cmlidXRlcztcbiAgICB1dGlsaXphdGlvbjtcbiAgICBjb250ZXh0TWVudTtcbiAgICBjcmVhdGVkQXQ7XG4gICAgdXBkYXRlZEF0O1xuICAgIGludGVyY2VwdDtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5yb290Tm9kZSA9ICdObyc7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgdGhpcy5jb250ZXh0TWVudSA9ICdZZXMnO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBDb25maWcge1xuICB1dWlkO1xuICBpZDtcbiAgbmFtZTtcbiAgZGF0YTtcbiAgY2hpbGRyZW47XG4gIGNvbnRleHRNZW51O1xuICByb290Tm9kZTtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgICB0aGlzLnJvb3ROb2RlID0gJ05vJztcbiAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICAgIHRoaXMuY29udGV4dE1lbnUgPSAnWWVzJztcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEdyb3VwIHtcbiAgICBpZDtcbiAgICBuYW1lO1xuICAgIHR5cGU7XG4gICAgZ3JvdXA7XG4gICAgY2hpbGRyZW47XG5cbiAgICBjb25zdHJ1Y3RvcihpZHYsIHMsIGcpIHtcbiAgICAgICAgdGhpcy5pZCA9IGlkdjtcbiAgICAgICAgdGhpcy5uYW1lID0gcztcbiAgICAgICAgdGhpcy5ncm91cCA9IGc7XG4gICAgICAgIHRoaXMudHlwZSA9ICdHcm91cCc7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXJ2aWNlUG9saWN5IHtcbiAgICBpZDtcbiAgICB1dWlkO1xuICAgIG5hbWU7XG4gICAgdHlwZTtcbiAgICByb290Tm9kZTtcbiAgICBjaGlsZHJlbjtcbiAgICBjb250ZXh0TWVudTtcbiAgICBjcmVhdGVkQXQ7XG4gICAgdXBkYXRlZEF0O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucm9vdE5vZGUgPSAnTm8nO1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgICAgIHRoaXMuY29udGV4dE1lbnUgPSAnWWVzJztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBdHRyaWJ1dGUge1xuICAgIGlkO1xuICAgIG5hbWU7XG4gICAgdHlwZTtcbiAgICBjaGlsZHJlbjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRVJQb2xpY3kge1xuICAgIGlkO1xuICAgIHV1aWQ7XG4gICAgbmFtZTtcbiAgICBzdGF0dXM7XG4gICAgc2l6ZTtcbiAgICB0eXBlO1xuICAgIHNlbWFudGljO1xuICAgIGlzU3lzdGVtO1xuICAgIHJvb3ROb2RlO1xuICAgIGNoaWxkcmVuO1xuICAgIGNvbnRleHRNZW51O1xuICAgIGNyZWF0ZWRBdDtcbiAgICB1cGRhdGVkQXQ7XG4gICAgZGF0YTtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5yb290Tm9kZSA9ICdObyc7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgdGhpcy5jb250ZXh0TWVudSA9ICdZZXMnO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNlcnZpY2VFUlBvbGljeSB7XG4gICAgaWQ7XG4gICAgdXVpZDtcbiAgICBuYW1lO1xuICAgIHN0YXR1cztcbiAgICBzaXplO1xuICAgIHR5cGU7XG4gICAgcm9vdE5vZGU7XG4gICAgY2hpbGRyZW47XG4gICAgY29udGV4dE1lbnU7XG4gICAgY3JlYXRlZEF0O1xuICAgIHVwZGF0ZWRBdDtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnJvb3ROb2RlID0gJ05vJztcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgICAgICB0aGlzLmNvbnRleHRNZW51ID0gJ1llcyc7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRVJvdXRlciB7XG4gICAgaWQ7XG4gICAgdXVpZDtcbiAgICBuYW1lO1xuICAgIHZlcmlmaWVkO1xuICAgIHNpemU7XG4gICAgdHlwZTtcbiAgICBwcm92aWRlcjtcbiAgICByb290Tm9kZTtcbiAgICBzZXJ2ZXJFZ3Jlc3NQcm90b2NvbDtcbiAgICBzZXJ2ZXJFZ3Jlc3NIb3N0O1xuICAgIHNlcnZlckVncmVzc1BvcnQ7XG4gICAgY2hpbGRyZW47XG4gICAgdXRpbGl6YXRpb247XG4gICAgY29udGV4dE1lbnU7XG4gICAgb25saW5lO1xuICAgIGRpc2FibGVkO1xuICAgIHZlcnNpb247XG4gICAgdHVubmVsZXJFbmFibGVkO1xuICAgIHN5bmNTdGF0dXM7XG4gICAgY3JlYXRlZEF0O1xuICAgIHVwZGF0ZWRBdDtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnJvb3ROb2RlID0gJ05vJztcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgICAgICB0aGlzLmNvbnRleHRNZW51ID0gJ1llcyc7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2hpbGRyZW4ge1xuICAgIGlkO1xuICAgIG5hbWU7XG4gICAgc3RhdHVzO1xuICAgIHNpemU7XG4gICAgdHlwZTtcbiAgICBjaGlsZHJlbjtcbiAgICBkYXRhOiBDaGlsZHJlbjtcbiAgICByb290Tm9kZSA9ICdObyc7XG4gICAgZmlyc3RDaGlsZCA9ICdObyc7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMudHlwZSA9ICdDaGlsZHJlbic7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICB9XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE5ldHdvcmtWaXN1YWxpemVySGVscGVyIHtcblxuICAgdW5pcUlJZDphbnkgPTA7XG5cbiBjcmVhdGVVbmlxSWQoKSB7XG4gICByZXR1cm4gKyt0aGlzLnVuaXFJSWQ7XG4gfVxuICBwdWJsaWMgY3JlYXRlRWRnZVJvdXRlck5vZGUoZXIsIGlzUm9vdE5vZGUgPSAnWWVzJykge1xuICAgICAgY29uc3QgZXJPYiA9IG5ldyBFUm91dGVyKCk7XG4gICAgICAvLyBlck9iLmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgIGVyT2IudXVpZCA9IGVyLmlkO1xuICAgICAgICAgZXJPYi5uYW1lID0gZXIubmFtZTtcbiAgICAgICAgIGVyT2IudmVyaWZpZWQgPSBlci5pc1ZlcmlmaWVkPyAnWWVzJzogJ05vJztcbiAgICAgICAgIC8vZXJPYi52ZXJzaW9uID0gZXIucHJvZHVjdFZlcnNpb247XG4gICAgICAgICBlck9iLm9ubGluZSA9IGVyLmlzT25saW5lPyAnWWVzJzogJ05vJztcbiAgICAgICAgIGVyT2IuZGlzYWJsZWQgPSBlci5kaXNhYmxlZD8gJ1llcyc6ICdObyc7XG4gICAgICAgICBlck9iLnR5cGUgPSAnRWRnZSBSb3V0ZXInO1xuICAgICAgICAgZXJPYi5yb290Tm9kZSA9IGlzUm9vdE5vZGU7XG4gICAgICAgICBlck9iLnR1bm5lbGVyRW5hYmxlZCA9IGVyLnR1bm5lbGVyRW5hYmxlZD8gZXIudHVubmVsZXJFbmFibGVkOiAnTm8nO1xuICAgICAgICAgZXJPYi5zeW5jU3RhdHVzID0gZXIuc3luY1N0YXR1cz8gZXIuc3luY1N0YXR1czonTm8nO1xuICAgICAgICAgZXJPYi5jcmVhdGVkQXQgPSBlci5jcmVhdGVkQXQ7XG4gICAgICAgICBlck9iLnVwZGF0ZWRBdCA9IGVyLnVwZGF0ZWRBdDtcbiAgIHJldHVybiBlck9iO1xuICB9XG4gIHB1YmxpYyBjcmVhdGVTZXJ2aWNlRWRnZVJvdXRlclBvbGljeU5vZGUocmF3T2JqLCBpc1Jvb3ROb2RlID0gJ1llcycpIHtcbiAgICAgY29uc3Qgc2VydmljZWVycG9saWN5ID0gbmV3IFNlcnZpY2VFUlBvbGljeSgpO1xuICAgICAvLyBzZXJ2aWNlZXJwb2xpY3kuaWQgPSBjcmVhdGVJZCgpO1xuICAgICBzZXJ2aWNlZXJwb2xpY3kudXVpZCA9IHJhd09iai5pZDtcbiAgICAgc2VydmljZWVycG9saWN5Lm5hbWUgPSByYXdPYmoubmFtZTtcbiAgICAgc2VydmljZWVycG9saWN5LnR5cGUgPSAnU2VydmljZSBSb3V0ZXIgUG9saWN5JztcbiAgICAgc2VydmljZWVycG9saWN5LnJvb3ROb2RlID0gaXNSb290Tm9kZTtcbiAgICByZXR1cm4gc2VydmljZWVycG9saWN5O1xuICB9XG4gIHB1YmxpYyBjcmVhdGVFZGdlUm91dGVyUG9saWN5Tm9kZShyYXdPYmosIGlzUm9vdE5vZGUgPSAnWWVzJykge1xuICAgIGNvbnN0IGVycG9saWN5ID0gbmV3IEVSUG9saWN5KCk7XG4gICAgIC8vIGVycG9saWN5LmlkID0gY3JlYXRlSWQoKTtcbiAgICAgIGVycG9saWN5LnV1aWQgPSByYXdPYmouaWQ7XG4gICAgICBlcnBvbGljeS5uYW1lID0gcmF3T2JqLm5hbWU7XG4gICAgICBlcnBvbGljeS50eXBlID0gJ0VkZ2UgUm91dGVyIFBvbGljeSc7XG4gICAgICBlcnBvbGljeS5yb290Tm9kZSA9IGlzUm9vdE5vZGU7XG4gICAgICBlcnBvbGljeS5pc1N5c3RlbSA9IHJhd09iai5pc1N5c3RlbTtcbiAgICAgIGVycG9saWN5LnNlbWFudGljID0gcmF3T2JqLnNlbWFudGljO1xuICAgcmV0dXJuIGVycG9saWN5O1xuICB9XG4gIHB1YmxpYyBjcmVhdGVTZXJ2aWNlUG9saWN5Tm9kZShyYXdPYmosIGlzUm9vdE5vZGUgPSAnWWVzJykge1xuICAgIGNvbnN0IGJpbmRHcnAgPSBuZXcgR3JvdXAoNDM0MjMsICdCaW5kLVBvbGljaWVzJywgJ0JpbmQgU2VydmljZSBQb2xpY3knKTtcbiAgICBjb25zdCBkaWFsR3JwID0gbmV3IEdyb3VwKDQzNTQ1LCAnRGlhbC1Qb2xpY2llcycsICdEaWFsIFNlcnZpY2UgUG9saWN5Jyk7XG5cbiAgICBjb25zdCBzcG9saWN5OmFueSA9IG5ldyBTZXJ2aWNlUG9saWN5KCk7XG4gICAgICAgLy8gc3BvbGljeS5pZCA9IGNyZWF0ZUlkKCk7XG4gICAgICAgc3BvbGljeS5pZCA9IDg3OTU2O1xuICAgICAgICBzcG9saWN5LnV1aWQgPSByYXdPYmouaWQ7XG4gICAgICAgIHNwb2xpY3kubmFtZSA9IHJhd09iai5uYW1lO1xuICAgICAgICBzcG9saWN5LnR5cGUgPSAnU2VydmljZSBQb2xpY3knO1xuICAgICAgICBzcG9saWN5LnJvb3ROb2RlID0gaXNSb290Tm9kZTtcbiAgICAgICAgc3BvbGljeS5jbGlja1Byb2Nlc3MgPSBcIk5vdCBZZXRcIjtcbiAgICAgIGlmKHJhd09iai50eXBlPT09J0JpbmQnKSB7XG4gICAgICAgIGJpbmRHcnAuY2hpbGRyZW4ucHVzaChzcG9saWN5KTtcbiAgICAgICAgcmV0dXJuIGJpbmRHcnA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaWFsR3JwLmNoaWxkcmVuLnB1c2goc3BvbGljeSk7XG4gICAgICAgIHJldHVybiBkaWFsR3JwO1xuICAgICAgfVxuICB9XG4gIHB1YmxpYyBjcmVhdGVJZGVudGl0eU5vZGUocmF3T2JqLCBpc1Jvb3ROb2RlID0gJ1llcycpIHtcbiAgICBjb25zdCBlbmRwb2ludCA9IG5ldyBJZGVudGl0eSgpO1xuICAgICAgICAgICAgZW5kcG9pbnQucm9vdE5vZGUgPSBpc1Jvb3ROb2RlO1xuICAgICAgICAgICAvLyBlbmRwb2ludC5pZCA9IGNyZWF0ZUlkKCk7XG4gICAgICAgICAgICBlbmRwb2ludC5pZCA9IDU0MzI7XG4gICAgICAgICAgICBlbmRwb2ludC51dWlkID0gcmF3T2JqLmlkO1xuICAgICAgICAgICAgZW5kcG9pbnQubmFtZSA9IHJhd09iai5uYW1lO1xuICAgICAgICAgICAgZW5kcG9pbnQub25saW5lID0gcmF3T2JqLmhhc0FwaVNlc3Npb24gPT09IHRydWUgPyAnWWVzJyA6ICdObyc7XG4gICAgICAgICAgICBlbmRwb2ludC50eXBlID0gJ0lkZW50aXR5JztcbiAgICAgICAgICAgIGVuZHBvaW50LmNyZWF0ZWRBdCA9IHJhd09iai5jcmVhdGVkQXQ7XG4gICAgICAgICAgICBlbmRwb2ludC51cGRhdGVkQXQgPSByYXdPYmoudXBkYXRlZEF0O1xuICAgICAgICAgICAgZW5kcG9pbnQuc3RhdHVzID0gcmF3T2JqLnNka0luZm8gIT09IG51bGwgPyAnUmVnaXN0ZXJlZCcgOiAnTm90IFJlZ2lzdGVyZWQnO1xuICAgICAgICAgICAgICBpZiAocmF3T2JqLnNka0luZm8pIHtcbiAgICAgICAgICAgICAgICAgIGVuZHBvaW50Lm9zID0gcmF3T2JqLnNka0luZm8udHlwZT8gcmF3T2JqLnNka0luZm8udHlwZTogcmF3T2JqLnNka0luZm8uYXBwSWQ7XG4gICAgICAgICAgICAgICAgICBlbmRwb2ludC5vc1ZlcnNpb24gPSByYXdPYmouc2RrSW5mby52ZXJzaW9uO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChyYXdPYmouYXV0aFBvbGljeSAmJiByYXdPYmouYXV0aFBvbGljeS5uYW1lLmluY2x1ZGVzKFwiQnJvd1plclwiKSkge1xuICAgICAgICAgICAgICAgICBlbmRwb2ludC50eXBlID0gJ0Jyb3daZXIgSWRlbnRpdHknO1xuICAgICAgICAgICAgICB9XG4gICAgcmV0dXJuICAgZW5kcG9pbnQ7XG4gIH1cbiAgcHVibGljIGNyZWF0ZVNlcnZpY2VOb2RlKHJhd09iaiwgaXNSb290Tm9kZSA9ICdZZXMnKSB7XG4gICAgICBjb25zdCBzZXJ2aWNlb2JqID0gbmV3IFNlcnZpY2UoKTtcbiAgICAgICAvLyBzZXJ2aWNlb2JqLmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgc2VydmljZW9iai5uYW1lID0gcmF3T2JqLm5hbWU7XG4gICAgICAgIHNlcnZpY2VvYmoudXVpZCA9IHJhd09iai5pZDtcbiAgICAgICAgc2VydmljZW9iai50eXBlID0gJ1NlcnZpY2UnO1xuICAgICAgICBzZXJ2aWNlb2JqLnJvb3ROb2RlID0gaXNSb290Tm9kZTtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlc3dpdGhOYW1lID0gW107XG4gICAgICAgIHJhd09iaiAmJiByYXdPYmoucm9sZUF0dHJpYnV0ZXMgJiYgcmF3T2JqLnJvbGVBdHRyaWJ1dGVzLmZpbmQoKHNyYXR0cikgPT4ge1xuICAgICAgICAgICBhdHRyaWJ1dGVzd2l0aE5hbWUucHVzaChzcmF0dHIpO1xuICAgICAgICB9KTtcbiAgICByZXR1cm4gc2VydmljZW9iajtcbiAgfVxuXG4gICAgcHVibGljIGdldFJlc291cmNlVHJlZU9iaihcbiAgICAgICAgbmV0d29ya05hbWUsXG4gICAgICAgIG5ldHdvcmtTdGF0dXMsXG4gICAgICAgIHNlcnZpY2VzLFxuICAgICAgICBpZGVudGl0aWVzLFxuICAgICAgICBzZXJ2aWNlUG9saWNpZXMsXG4gICAgICAgIGVkZ2Vyb3V0ZXJzLFxuICAgICAgICBlZGdlUm91dGVyUG9saWNpZXMsXG4gICAgICAgIHNlcnZpY2VFZGdlUm91dGVyUG9saWNpZXMsXG4gICAgICAgIC8vIG5ldHdvcmtQcm9kdWN0VmVyc2lvbixcbiAgICAgICAgc2VydmljZXNfdG90YWxDb3VudCwgaWRlbnRpdGllc190b3RhbENvdW50LCBlZGdlcm91dGVyc190b3RhbENvdW50LFxuICAgICAgICBzZXJ2aWNlX3BvbGljaWVzX3RvdGFsQ291bnQsIGVkZ2Vfcm91dGVyX3BvbGljaWVzX3RvdGFsQ291bnQsXG4gICAgICAgIHNlcnZpY2Vfcm91dGVyX3BvbGljaWVzX3RvdGFsQ291bnQsXG4gICAgICAgIHVuaXFJZCxcbiAgICAgICAgbG9nZ2VyLFxuICAgICAgICAuLi5hcmdzOiBhbnlcbiAgICApIHtcbiAgICAgICB0aGlzLnVuaXFJSWQgPSB1bmlxSWQ7XG5cbiAgICAgICAgZnVuY3Rpb24gY3JlYXRlSWQoKSB7XG4gICAgICAgICAgICArK3VuaXFJZDtcbiAgICAgICAgICAvLyAgKyt0aGlzLnVuaXFJSWQ7XG4gICAgICAgICAgICByZXR1cm4gdW5pcUlkO1xuICAgICAgICB9XG5cbiAgICAgICAgY2xhc3MgUm9vdEpzb24ge1xuICAgICAgICAgICAgaWQgPSBjcmVhdGVJZCgpO1xuICAgICAgICAgICAgbmFtZTtcbiAgICAgICAgICAgIGxhc3RJZCA9IDA7XG4gICAgICAgICAgICBjaGlsZHJlbiA9IFtdO1xuICAgICAgICAgICAgY29udGV4dE1lbnUgPSAnWWVzJztcbiAgICAgICAgICAgIHR5cGUgPSAnTmV0d29yayc7XG4gICAgICAgICAgICByb290Tm9kZSA9ICdObyc7XG4gICAgICAgICAgIC8vIHZlcnNpb24gPSBuZXR3b3JrUHJvZHVjdFZlcnNpb247XG4gICAgICAgICAgICBzdGF0dXM7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb290SnNvbiA9IG5ldyBSb290SnNvbigpO1xuICAgICAgICByb290SnNvbi5uYW1lID0gJ05ldHdvcmsnO1xuICAgICAgICByb290SnNvbi5zdGF0dXMgPSAnUHJvdmlzaW9uZWQnO1xuXG4gICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NJZGVudGl0aWVzRm9yVHJlZShcbiAgICAgICAgICAgIGlkZW50aXRpZXNDaGlsZHJlbixcbiAgICAgICAgICAgIGlkZW50aXRpZXMsXG4gICAgICAgICAgICBueCxcbiAgICAgICAgICAgIG55XG4gICAgICAgICkge1xuICAgICAgICAgIGlmKGFyZ3NbMl09PT1mYWxzZSkgcmV0dXJuIGlkZW50aXRpZXNDaGlsZHJlbjtcbiAgICAgICAgICAgIGNvbnN0IG9ial9hcnJheSA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IG54OyBqIDwgbnk7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZHBvaW50ID0gbmV3IElkZW50aXR5KCk7XG4gICAgICAgICAgICAgICAgZW5kcG9pbnQucm9vdE5vZGUgPSAnWWVzJztcbiAgICAgICAgICAgICAgICBlbmRwb2ludC5pZCA9IGNyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgICAgZW5kcG9pbnQudXVpZCA9IGlkZW50aXRpZXNbal0uaWQ7XG4gICAgICAgICAgICAgICAgZW5kcG9pbnQubmFtZSA9IGlkZW50aXRpZXNbal0ubmFtZTtcbiAgICAgICAgICAgICAgICBlbmRwb2ludC5vbmxpbmUgPSBpZGVudGl0aWVzW2pdLmhhc0FwaVNlc3Npb24gPT09IHRydWUgPyAnWWVzJyA6ICdObyc7XG4gICAgICAgICAgICAgICAgZW5kcG9pbnQudHlwZSA9ICdJZGVudGl0eSc7XG4gICAgICAgICAgICAgICAgZW5kcG9pbnQuY3JlYXRlZEF0ID0gaWRlbnRpdGllc1tqXS5jcmVhdGVkQXQ7XG4gICAgICAgICAgICAgICAgZW5kcG9pbnQudXBkYXRlZEF0ID0gaWRlbnRpdGllc1tqXS51cGRhdGVkQXQ7XG4gICAgICAgICAgICAgICAgZW5kcG9pbnQuc3RhdHVzID0gaWRlbnRpdGllc1tqXS5zZGtJbmZvICE9PSBudWxsID8gJ1JlZ2lzdGVyZWQnIDogJ05vdCBSZWdpc3RlcmVkJztcbiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdGllc1tqXS5zZGtJbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZHBvaW50Lm9zID0gaWRlbnRpdGllc1tqXS5zZGtJbmZvLnR5cGU/IGlkZW50aXRpZXNbal0uc2RrSW5mby50eXBlOiBpZGVudGl0aWVzW2pdLnNka0luZm8uYXBwSWQ7XG4gICAgICAgICAgICAgICAgICAgIGVuZHBvaW50Lm9zVmVyc2lvbiA9IGlkZW50aXRpZXNbal0uc2RrSW5mby52ZXJzaW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdGllc1tqXS5hdXRoUG9saWN5ICYmIGlkZW50aXRpZXNbal0uYXV0aFBvbGljeS5uYW1lLmluY2x1ZGVzKFwiQnJvd1plclwiKSkge1xuICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LnR5cGUgPSAnQnJvd1plciBJZGVudGl0eSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9ial9hcnJheS5wdXNoKGVuZHBvaW50KTtcbiAgICAgICAgICAgIH0gLy8gZW5kIG9mIG1haW4gZm9yIGxvb3BcbiAgICAgICAgICByZXR1cm4gZ3JvdXBpbmcoJ0lkZW50aXRpZScsIGlkZW50aXRpZXNDaGlsZHJlbiwgb2JqX2FycmF5KTtcblxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHN1Ykdyb3VwaW5nKG5hbWUsIG1haW5Hcm91cCkge1xuICAgICAgICAgICBjb25zdCBwYWdlU2l6ZSA9IDI1O1xuICAgICAgICAgICBtYWluR3JvdXAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChtYWluR3JvdXAuY2hpbGRyZW4ubGVuZ3RoID4gcGFnZVNpemUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuOmFueSA9IFtdO1xuICAgICAgICAgICAgbGV0IHBhZ2VObyA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1haW5Hcm91cC5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RFbGVtZW50ID0gKGkgKyBwYWdlU2l6ZSkgPCBtYWluR3JvdXAuY2hpbGRyZW4ubGVuZ3RoPyAoaSArIHBhZ2VTaXplKSA6IChtYWluR3JvdXAuY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lUyA9XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lICsgJ3MgWycgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFpbkdyb3VwLmNoaWxkcmVuW2ldLm5hbWUuc3Vic3RyaW5nKDAsIDQpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICcgLSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1haW5Hcm91cC5jaGlsZHJlbltsYXN0RWxlbWVudC0xXS5uYW1lLnN1YnN0cmluZygwLCA0KSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXSc7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hsZCA9IG5ldyBHcm91cChcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUlkKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lUyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgKyAnIG5hbWUgc3RhcnRzIHdpdGggJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgbWFpbkdyb3VwLmNoaWxkcmVuW2ldLm5hbWUuc3Vic3RyaW5nKDAsIDQpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAnIFRvICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5Hcm91cC5jaGlsZHJlbltsYXN0RWxlbWVudC0xXS5uYW1lLnN1YnN0cmluZygwLCA0KVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IDA7XG4gICAgICAgICAgICAgICAgZm9yIChqID0gaTsgaiA8IGxhc3RFbGVtZW50OyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgIGNobGQuY2hpbGRyZW4ucHVzaChtYWluR3JvdXAuY2hpbGRyZW5bal0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgLS1pO1xuICAgICAgICAgICAgICAgICAgY2hsZC5uYW1lID0gY2hsZC5uYW1lICsgJyAoJyArIGNobGQuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjaGxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1haW5Hcm91cC5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbWFpbkdyb3VwO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZ3JvdXBpbmcobmFtZSwgY2hpbGRyZW4sIG9iamVjdHNBcnJheSkge1xuICAgICAgICAgIGxldCBwcm90b2NvbFJEUEdycCwgcHJvdG9jb2xIVFRQU0dycCwgcHJvdG9jb2xIVFRQR3JwLCBwcm90b2NvbEZUUEdycCwgdW5yZWdpc3RlcmVkR3JwO1xuXG4gICAgICAgICAgaWYgKG5hbWUgPT09ICdTZXJ2aWNlJykge1xuICAgICAgICAgICAgIHByb3RvY29sUkRQR3JwID0gbmV3IEdyb3VwKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUlkKCksXG4gICAgICAgICAgICAgICAgJ1NlcnZpY2VzIFtwcm90b2NvbC1SRFBdJyxcbiAgICAgICAgICAgICAgICAnU2VydmljZXMgY3JlYXRlZCBmb3IgUkRQIHByb3RvY29sJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICBwcm90b2NvbEhUVFBTR3JwID0gbmV3IEdyb3VwKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUlkKCksXG4gICAgICAgICAgICAgICAgJ1NlcnZpY2VzIFtwcm90b2NvbC1IVFRQU10nLFxuICAgICAgICAgICAgICAgICdTZXJ2aWNlIGNyZWF0ZWQgZm9yIEhUVFBTIHByb3RvY29sJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICBwcm90b2NvbEhUVFBHcnAgPSBuZXcgR3JvdXAoXG4gICAgICAgICAgICAgICAgY3JlYXRlSWQoKSxcbiAgICAgICAgICAgICAgICAnU2VydmljZXMgW3Byb3RvY29sLUhUVFBdJyxcbiAgICAgICAgICAgICAgICAnU2VydmljZSBjcmVhdGVkIGZvciBIVFRQIHByb3RvY29sJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICBwcm90b2NvbEZUUEdycCA9IG5ldyBHcm91cChjcmVhdGVJZCgpLCAnU2VydmljZXMgW3Byb3RvY29sLUZUUF0nLCAnU2VydmljZSBjcmVhdGVkIGZvciBGVFAgcHJvdG9jb2wnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgIGlmIChuYW1lID09PSAnSWRlbnRpdGllJykge1xuICAgICAgICAgICAgIHVucmVnaXN0ZXJlZEdycCA9IG5ldyBHcm91cChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlSWQoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ0lkZW50aXRpZXNbVW5yZWdpc3RlcmVkXScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdJZGVudGl0aWVzIHRoYXQgYXJlIG5vdCByZWdpc3RlcmVkJ1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhYmNkR3JwID0gbmV3IEdyb3VwKGNyZWF0ZUlkKCksIG5hbWUgKyAncyBbQS1EXScsIG5hbWUgKycgbmFtZSBzdGFydHMgd2l0aCBBIHRvIEQnKTtcbiAgICAgICAgICAgIGNvbnN0IGVmZ2hHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgbmFtZSArICdzIFtFLUhdJywgbmFtZSArJyBuYW1lIHN0YXJ0cyB3aXRoIEUgdG8gSCcpO1xuICAgICAgICAgICAgY29uc3QgaWprbEdycCA9IG5ldyBHcm91cChjcmVhdGVJZCgpLCBuYW1lICsgJ3MgW0ktTF0nLCBuYW1lICsnIG5hbWUgc3RhcnRzIHdpdGggSSB0byBMJyk7XG4gICAgICAgICAgICBjb25zdCBtbm9wR3JwID0gbmV3IEdyb3VwKGNyZWF0ZUlkKCksIG5hbWUgKyAncyBbTS1QXScsIG5hbWUgKycgbmFtZSBzdGFydHMgd2l0aCBNIHRvIFAnKTtcbiAgICAgICAgICAgIGNvbnN0IHFyc3RHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgbmFtZSArICdzIFtRLVRdJywgbmFtZSArJyBuYW1lIHN0YXJ0cyB3aXRoIFEgdG8gVCcpO1xuICAgICAgICAgICAgY29uc3QgdXZ3eEdycCA9IG5ldyBHcm91cChjcmVhdGVJZCgpLCBuYW1lICsgJ3MgW1UtWF0nLCBuYW1lICsnIG5hbWUgc3RhcnRzIHdpdGggVSB0byBYJyk7XG4gICAgICAgICAgICBjb25zdCB5ekdycCA9IG5ldyBHcm91cChjcmVhdGVJZCgpLCAgIG5hbWUgKyAncyBbWS1aXScsIG5hbWUgKycgbmFtZSBzdGFydHMgd2l0aCBZIGFuZCBaJyk7XG4gICAgICAgICAgICBjb25zdCBvbmVUbzlHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgbmFtZSArICdzIFsxLTldJywgbmFtZSArJyBuYW1lIHN0YXJ0cyB3aXRoIDAgdG8gOScpO1xuICAgICAgICAgICAgY29uc3Qgc3BlY2lhbENoYXJHcnAgPSBuZXcgR3JvdXAoXG4gICAgICAgICAgICAgICAgY3JlYXRlSWQoKSxcbiAgICAgICAgICAgICAgICBuYW1lICsgJ3MgW290aGVyc10nLFxuICAgICAgICAgICAgICAgIG5hbWUgKyAnIG5hbWUgc3RhcnRzIHdpdGggc3BlY2lhbCBjaGFyYWN0ZXJzJ1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvYmplY3RzQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvYmogPSBvYmplY3RzQXJyYXlbaV07XG4gICAgICAgICAgICAgICAgY29uc3QgY2hhID0gb2JqLm5hbWUuY2hhckF0KDApLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdJZGVudGl0aWUnICYmIG9iai5zdGF0dXMgPT09ICdOb3QgUmVnaXN0ZXJlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdW5yZWdpc3RlcmVkR3JwLmNoaWxkcmVuLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdTZXJ2aWNlJyAmJiBvYmoucHJvdG9jb2wgPT09ICdyZHAnKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3RvY29sUkRQR3JwLmNoaWxkcmVuLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdTZXJ2aWNlJyAmJiBvYmoucHJvdG9jb2wgPT09ICdodHRwcycpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2xIVFRQU0dycC5jaGlsZHJlbi5wdXNoKG9iaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnU2VydmljZScgJiYgb2JqLnByb3RvY29sID09PSAnaHR0cCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2xIVFRQR3JwLmNoaWxkcmVuLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdTZXJ2aWNlJyAmJiAgb2JqLnByb3RvY29sID09PSAnZnRwJykge1xuICAgICAgICAgICAgICAgICAgICBwcm90b2NvbEZUUEdycC5jaGlsZHJlbi5wdXNoKG9iaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICdhJyB8fCBjaGEgPT09ICdiJyB8fCBjaGEgPT09ICdjJyB8fCBjaGEgPT09ICdkJykge1xuICAgICAgICAgICAgICAgICAgICBhYmNkR3JwLmNoaWxkcmVuLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoYSA9PT0gJ2UnIHx8IGNoYSA9PT0gJ2YnIHx8IGNoYSA9PT0gJ2cnIHx8IGNoYSA9PT0gJ2gnKSB7XG4gICAgICAgICAgICAgICAgICAgIGVmZ2hHcnAuY2hpbGRyZW4ucHVzaChvYmopO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhID09PSAnaScgfHwgY2hhID09PSAnaicgfHwgY2hhID09PSAnaycgfHwgY2hhID09PSAnbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWprbEdycC5jaGlsZHJlbi5wdXNoKG9iaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICdtJyB8fCBjaGEgPT09ICduJyB8fCBjaGEgPT09ICdvJyB8fCBjaGEgPT09ICdwJykge1xuICAgICAgICAgICAgICAgICAgICBtbm9wR3JwLmNoaWxkcmVuLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoYSA9PT0gJ3EnIHx8IGNoYSA9PT0gJ3InIHx8IGNoYSA9PT0gJ3MnIHx8IGNoYSA9PT0gJ3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIHFyc3RHcnAuY2hpbGRyZW4ucHVzaChvYmopO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhID09PSAndScgfHwgY2hhID09PSAndicgfHwgY2hhID09PSAndycgfHwgY2hhID09PSAneCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdXZ3eEdycC5jaGlsZHJlbi5wdXNoKG9iaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGEgPT09ICd5JyB8fCBjaGEgPT09ICd6Jykge1xuICAgICAgICAgICAgICAgICAgICB5ekdycC5jaGlsZHJlbi5wdXNoKG9iaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgY2hhID09PSAnMCcgfHxcbiAgICAgICAgICAgICAgICAgICAgY2hhID09PSAnMScgfHxcbiAgICAgICAgICAgICAgICAgICAgY2hhID09PSAnMicgfHxcbiAgICAgICAgICAgICAgICAgICAgY2hhID09PSAnMycgfHxcbiAgICAgICAgICAgICAgICAgICAgY2hhID09PSAnNCcgfHxcbiAgICAgICAgICAgICAgICAgICAgY2hhID09PSAnNScgfHxcbiAgICAgICAgICAgICAgICAgICAgY2hhID09PSAnNicgfHxcbiAgICAgICAgICAgICAgICAgICAgY2hhID09PSAnNycgfHxcbiAgICAgICAgICAgICAgICAgICAgY2hhID09PSAnOCcgfHxcbiAgICAgICAgICAgICAgICAgICAgY2hhID09PSAnOSdcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgb25lVG85R3JwLmNoaWxkcmVuLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzcGVjaWFsQ2hhckdycC5jaGlsZHJlbi5wdXNoKG9iaik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSAvLyBlbmQgbWFpbiBmb3IgbG9vcFxuXG4gICAgICAgICAgaWYgKG5hbWUgPT09ICdTZXJ2aWNlJykge1xuICAgICAgICAgICAgaWYgKHByb3RvY29sUkRQR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBwcm90b2NvbFJEUEdycC5jaGlsZHJlbi5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHByb3RvY29sUkRQR3JwLm5hbWUgPSBwcm90b2NvbFJEUEdycC5uYW1lICsgJygnICsgcHJvdG9jb2xSRFBHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLmNoaWxkcmVuLnB1c2gocHJvdG9jb2xSRFBHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3RvY29sSFRUUFNHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHByb3RvY29sSFRUUFNHcnAuY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBwcm90b2NvbEhUVFBTR3JwLm5hbWUgPSBwcm90b2NvbEhUVFBTR3JwLm5hbWUgKyAnKCcgKyBwcm90b2NvbEhUVFBTR3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5jaGlsZHJlbi5wdXNoKHByb3RvY29sSFRUUFNHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3RvY29sSFRUUEdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcHJvdG9jb2xIVFRQR3JwLmNoaWxkcmVuLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcHJvdG9jb2xIVFRQR3JwLm5hbWUgPSBwcm90b2NvbEhUVFBHcnAubmFtZSArICcoJyArIHByb3RvY29sSFRUUEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4uY2hpbGRyZW4ucHVzaChwcm90b2NvbEhUVFBHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3RvY29sRlRQR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBwcm90b2NvbEZUUEdycC5jaGlsZHJlbi5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHByb3RvY29sRlRQR3JwLm5hbWUgPSBwcm90b2NvbEZUUEdycC5uYW1lICsgJygnICsgcHJvdG9jb2xGVFBHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLmNoaWxkcmVuLnB1c2gocHJvdG9jb2xGVFBHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuYW1lID09PSAnSWRlbnRpdGllJyAmJiB1bnJlZ2lzdGVyZWRHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHVucmVnaXN0ZXJlZEdycC5uYW1lID0gdW5yZWdpc3RlcmVkR3JwLm5hbWUgKyAnKCcgKyB1bnJlZ2lzdGVyZWRHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLmNoaWxkcmVuLnB1c2godW5yZWdpc3RlcmVkR3JwKTtcbiAgICAgICAgICAgICAgICBzdWJHcm91cGluZyhuYW1lLCB1bnJlZ2lzdGVyZWRHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNwZWNpYWxDaGFyR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBzcGVjaWFsQ2hhckdycC5uYW1lID0gc3BlY2lhbENoYXJHcnAubmFtZSArICcoJyArIHNwZWNpYWxDaGFyR3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5jaGlsZHJlbi5wdXNoKHNwZWNpYWxDaGFyR3JwKTtcbiAgICAgICAgICAgICAgICBzdWJHcm91cGluZyhuYW1lLCBzcGVjaWFsQ2hhckdycCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWJjZEdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYWJjZEdycC5uYW1lID0gYWJjZEdycC5uYW1lICsgJygnICsgYWJjZEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4uY2hpbGRyZW4ucHVzaChhYmNkR3JwKTtcbiAgICAgICAgICAgICAgICBzdWJHcm91cGluZyhuYW1lLCBhYmNkR3JwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlZmdoR3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBlZmdoR3JwLm5hbWUgPSBlZmdoR3JwLm5hbWUgKyAnKCcgKyBlZmdoR3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5jaGlsZHJlbi5wdXNoKGVmZ2hHcnApO1xuICAgICAgICAgICAgICAgIHN1Ykdyb3VwaW5nKG5hbWUsIGVmZ2hHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlqa2xHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGlqa2xHcnAubmFtZSA9IGlqa2xHcnAubmFtZSArICcoJyArIGlqa2xHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLmNoaWxkcmVuLnB1c2goaWprbEdycCk7XG4gICAgICAgICAgICAgICAgc3ViR3JvdXBpbmcobmFtZSwgaWprbEdycCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobW5vcEdycC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgbW5vcEdycC5uYW1lID0gbW5vcEdycC5uYW1lICsgJygnICsgbW5vcEdycC5jaGlsZHJlbi5sZW5ndGggKyAnKSc7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4uY2hpbGRyZW4ucHVzaChtbm9wR3JwKTtcbiAgICAgICAgICAgICAgICBzdWJHcm91cGluZyhuYW1lLCBtbm9wR3JwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChxcnN0R3JwLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBxcnN0R3JwLm5hbWUgPSBxcnN0R3JwLm5hbWUgKyAnKCcgKyBxcnN0R3JwLmNoaWxkcmVuLmxlbmd0aCArICcpJztcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5jaGlsZHJlbi5wdXNoKHFyc3RHcnApO1xuICAgICAgICAgICAgICAgIHN1Ykdyb3VwaW5nKG5hbWUsIHFyc3RHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHV2d3hHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHV2d3hHcnAubmFtZSA9IHV2d3hHcnAubmFtZSArICcoJyArIHV2d3hHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLmNoaWxkcmVuLnB1c2godXZ3eEdycCk7XG4gICAgICAgICAgICAgICAgc3ViR3JvdXBpbmcobmFtZSwgdXZ3eEdycCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoeXpHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHl6R3JwLm5hbWUgPSB5ekdycC5uYW1lICsgJygnICsgeXpHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLmNoaWxkcmVuLnB1c2goeXpHcnApO1xuICAgICAgICAgICAgICAgIHN1Ykdyb3VwaW5nKG5hbWUsIHl6R3JwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvbmVUbzlHcnAuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIG9uZVRvOUdycC5uYW1lID0gb25lVG85R3JwLm5hbWUgKyAnKCcgKyBvbmVUbzlHcnAuY2hpbGRyZW4ubGVuZ3RoICsgJyknO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLmNoaWxkcmVuLnB1c2gob25lVG85R3JwKTtcbiAgICAgICAgICAgICAgICBzdWJHcm91cGluZyhuYW1lLCBvbmVUbzlHcnApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc1NlcnZpY2VQb2xpY2llc0ZvclRyZWUoXG4gICAgICAgICAgICBzZXJ2aWNlUG9saWN5Q2hpbGRyZW4sXG4gICAgICAgICAgICBzZXJ2aWNlUG9saWNpZXMsXG4gICAgICAgICAgICBueCxcbiAgICAgICAgICAgIG55XG4gICAgICAgICkge1xuICAgICAgICAgIGlmKGFyZ3NbMF09PT1mYWxzZSkgcmV0dXJuIHNlcnZpY2VQb2xpY3lDaGlsZHJlbjtcblxuICAgICAgICAgIGNvbnN0IGJpbmRHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgJ0JpbmQtUG9saWNpZXMnLCAnQmluZCBTZXJ2aWNlIFBvbGljeScpO1xuICAgICAgICAgIGNvbnN0IGRpYWxHcnAgPSBuZXcgR3JvdXAoY3JlYXRlSWQoKSwgJ0RpYWwtUG9saWNpZXMnLCAnRGlhbCBTZXJ2aWNlIFBvbGljeScpO1xuXG4gICAgICAgICAgc2VydmljZVBvbGljaWVzLmZvckVhY2goIChzcCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3BvbGljeSA9IG5ldyBTZXJ2aWNlUG9saWN5KCk7XG4gICAgICAgICAgICAgICAgc3BvbGljeS5pZCA9IGNyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgICAgc3BvbGljeS51dWlkID0gc3AuaWQ7XG4gICAgICAgICAgICAgICAgc3BvbGljeS5uYW1lID0gc3AubmFtZTtcbiAgICAgICAgICAgICAgICBzcG9saWN5LnR5cGUgPSAnU2VydmljZSBQb2xpY3knO1xuICAgICAgICAgICAgICAgIHNwb2xpY3kucm9vdE5vZGUgPSAnWWVzJztcbiAgICAgICAgICAgICAgICBpZihzcC50eXBlPT09J0JpbmQnKSB7XG4gICAgICAgICAgICAgICAgICBiaW5kR3JwLmNoaWxkcmVuLnB1c2goc3BvbGljeSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGRpYWxHcnAuY2hpbGRyZW4ucHVzaChzcG9saWN5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSApO1xuXG4gICAgICAgICAgIGJpbmRHcnAubmFtZSA9IGJpbmRHcnAubmFtZSArICcoJysgYmluZEdycC5jaGlsZHJlbi5sZW5ndGggKycpJztcbiAgICAgICAgICAgc2VydmljZVBvbGljeUNoaWxkcmVuLmNoaWxkcmVuLnB1c2goYmluZEdycCk7XG4gICAgICAgICAgIHN1Ykdyb3VwaW5nKCdCaW5kLVBvbGljaWUnLCBiaW5kR3JwKTtcbiAgICAgICAgICAgZGlhbEdycC5uYW1lID0gZGlhbEdycC5uYW1lICsgJygnKyBkaWFsR3JwLmNoaWxkcmVuLmxlbmd0aCArJyknO1xuICAgICAgICAgICBzZXJ2aWNlUG9saWN5Q2hpbGRyZW4uY2hpbGRyZW4ucHVzaChkaWFsR3JwKTtcbiAgICAgICAgICAgc3ViR3JvdXBpbmcoJ0RpYWwtUG9saWNpZScsIGRpYWxHcnApO1xuICAgICAgICAgIHJldHVybiBzZXJ2aWNlUG9saWN5Q2hpbGRyZW47XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBwcm9jZXNzU2VydmljZXNGb3JUcmVlKFxuICAgICAgICAgICAgc2VydmljZXNDaGlsZHJlbixcbiAgICAgICAgICAgIHNlcnZpY2VzLFxuICAgICAgICAgICAgbngsXG4gICAgICAgICAgICBueVxuICAgICAgICApIHtcbiAgICAgICAgICBpZihhcmdzWzFdPT09ZmFsc2UpIHJldHVybiBzZXJ2aWNlc0NoaWxkcmVuO1xuICAgICAgICAgICAgY29uc3Qgc2VydmljZXN0cmVlID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gbng7IGkgPCBueTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VydmljZW9iaiA9IG5ldyBTZXJ2aWNlKCk7XG4gICAgICAgICAgICAgICAgc2VydmljZW9iai5pZCA9IGNyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgICAgc2VydmljZW9iai5uYW1lID0gc2VydmljZXNbaV0ubmFtZTtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlb2JqLnV1aWQgPSBzZXJ2aWNlc1tpXS5pZDtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlb2JqLnR5cGUgPSAnU2VydmljZSc7XG4gICAgICAgICAgICAgICAgc2VydmljZW9iai5yb290Tm9kZSA9ICdZZXMnO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlc3dpdGhOYW1lID0gW107XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlc3dpdGhOYW1lLnB1c2goJ0AnICsgc2VydmljZXNbaV0ubmFtZSk7XG4gICAgICAgICAgICAgICAgc2VydmljZXNbaV0gJiYgc2VydmljZXNbaV0ucm9sZUF0dHJpYnV0ZXMgJiYgc2VydmljZXNbaV0ucm9sZUF0dHJpYnV0ZXMuZmluZCgoc3JhdHRyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXN3aXRoTmFtZS5wdXNoKHNyYXR0cik7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgaXNJdFJEUFByb3RvY29sQXR0ciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCBpc0l0SFRUUFByb3RvY29sQXR0ciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCBpc0l0SFRUUFNQcm90b2NvbEF0dHIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBsZXQgaXNJdEZUUFByb3RvY29sQXR0ciA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBhdHRyaWJ1dGVzd2l0aE5hbWUubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXR0ck9iID0gbmV3IEF0dHJpYnV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBhdHRyT2IuaWQgPSBjcmVhdGVJZCgpO1xuICAgICAgICAgICAgICAgICAgICBhdHRyT2IubmFtZSA9IGF0dHJpYnV0ZXN3aXRoTmFtZVtrXTtcbiAgICAgICAgICAgICAgICAgICAgYXR0ck9iLnR5cGUgPSAnU2VydmljZSBBdHRyaWJ1dGUnO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhdHROYW1lID0gYXR0cmlidXRlc3dpdGhOYW1lW2tdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0l0UkRQUHJvdG9jb2xBdHRyID09PSBmYWxzZSAmJiBhdHROYW1lLmluY2x1ZGVzKCdyZHAnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZW9iai5wcm90b2NvbCA9ICdyZHAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNJdFJEUFByb3RvY29sQXR0ciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzSXRIVFRQU1Byb3RvY29sQXR0ciA9PT0gZmFsc2UgJiYgYXR0TmFtZS5pbmNsdWRlcygnaHR0cHMnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZW9iai5wcm90b2NvbCA9ICdodHRwcyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0l0SFRUUFNQcm90b2NvbEF0dHIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0l0SFRUUFNQcm90b2NvbEF0dHIgPT09IGZhbHNlICYmIGlzSXRIVFRQUHJvdG9jb2xBdHRyID09PSBmYWxzZSAmJiBhdHROYW1lLmluY2x1ZGVzKCdodHRwJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VvYmoucHJvdG9jb2wgPSAnaHR0cCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0l0SFRUUFByb3RvY29sQXR0ciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzSXRGVFBQcm90b2NvbEF0dHIgPT09IGZhbHNlICYmIGF0dE5hbWUuaW5jbHVkZXMoJ2Z0cCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlb2JqLnByb3RvY29sID0gJ2Z0cCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0l0RlRQUHJvdG9jb2xBdHRyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gLy8gZW5kIGlubmVyIGZvciBsb29wXG4gICAgICAgICAgICAgICAgc2VydmljZXN0cmVlLnB1c2goc2VydmljZW9iaik7XG4gICAgICAgICAgICB9IC8vIGVuZCBmb3IgbG9vcFxuICAgICAgICAgICAgcmV0dXJuIGdyb3VwaW5nKCdTZXJ2aWNlJywgc2VydmljZXNDaGlsZHJlbiwgc2VydmljZXN0cmVlKTtcbiAgICAgICAgfSAvLyBlbmQgb2YgcHJvY2Vzc1NlcnZpY2VzRm9yVHJlZVxuXG4gICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NFZGdlUm91dGVyUG9saWNpZXNGb3JUcmVlKFxuICAgICAgICAgICAgZWRnZVJvdXRlclBvbGljaWVzQ2hpbGRyZW4sXG4gICAgICAgICAgICBlZGdlUm91dGVyUG9saWNpZXMsXG4gICAgICAgICAgICBueCxcbiAgICAgICAgICAgIG55XG4gICAgICAgICkge1xuICAgICAgICAgIGlmKGFyZ3NbNF09PT1mYWxzZSkgcmV0dXJuIGVkZ2VSb3V0ZXJQb2xpY2llc0NoaWxkcmVuO1xuICAgICAgICAgIGNvbnN0IHBvbGljaWVzX0FycmF5ID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gbng7IGkgPCBueTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJwb2xpY3kgPSBuZXcgRVJQb2xpY3koKTtcbiAgICAgICAgICAgICAgICBlcnBvbGljeS5pZCA9IGNyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgICAgZXJwb2xpY3kudXVpZCA9IGVkZ2VSb3V0ZXJQb2xpY2llc1tpXS5pZDtcbiAgICAgICAgICAgICAgICBlcnBvbGljeS5uYW1lID0gZWRnZVJvdXRlclBvbGljaWVzW2ldLm5hbWU7XG4gICAgICAgICAgICAgICAgZXJwb2xpY3kudHlwZSA9ICdFZGdlIFJvdXRlciBQb2xpY3knO1xuICAgICAgICAgICAgICAgIGVycG9saWN5LnJvb3ROb2RlID0gJ1llcyc7XG4gICAgICAgICAgICAgICAgZXJwb2xpY3kuaXNTeXN0ZW0gPSBlZGdlUm91dGVyUG9saWNpZXNbaV0uaXNTeXN0ZW07XG4gICAgICAgICAgICAgICAgZXJwb2xpY3kuc2VtYW50aWMgPSBlZGdlUm91dGVyUG9saWNpZXNbaV0uc2VtYW50aWM7XG4gICAgICAgICAgICAgICAgcG9saWNpZXNfQXJyYXkucHVzaChlcnBvbGljeSk7XG4gICAgICAgICAgICB9IC8vIGVuZCBvZiBtYWluIGZvciBsb29wXG4gICAgICAgICAgICByZXR1cm4gZ3JvdXBpbmcoJ0VkZ2UgUm91dGVyIFBvbGljaWVzJyxlZGdlUm91dGVyUG9saWNpZXNDaGlsZHJlbixwb2xpY2llc19BcnJheSk7XG4gICAgICAgIH0gLy8gZW5kXG5cbiAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc1NlcnZpY2VFZGdlUm91dGVyUG9saWNpZXNGb3JUcmVlKFxuICAgICAgICAgICAgc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llc0NoaWxkcmVuLFxuICAgICAgICAgICAgc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llcyxcbiAgICAgICAgICAgIG54LFxuICAgICAgICAgICAgbnlcbiAgICAgICAgKSB7XG4gICAgICAgIGlmKGFyZ3NbNV09PT1mYWxzZSkgcmV0dXJuIHNlcnZpY2VFZGdlUm91dGVyUG9saWNpZXNDaGlsZHJlbjtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBueDsgaSA8IG55OyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZXJ2aWNlZXJwb2xpY3kgPSBuZXcgU2VydmljZUVSUG9saWN5KCk7XG4gICAgICAgICAgICAgICAgc2VydmljZWVycG9saWN5LmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlZXJwb2xpY3kudXVpZCA9IHNlcnZpY2VFZGdlUm91dGVyUG9saWNpZXNbaV0uaWQ7XG4gICAgICAgICAgICAgICAgc2VydmljZWVycG9saWN5Lm5hbWUgPSBzZXJ2aWNlRWRnZVJvdXRlclBvbGljaWVzW2ldLm5hbWU7XG4gICAgICAgICAgICAgICAgc2VydmljZWVycG9saWN5LnR5cGUgPSAnU2VydmljZSBSb3V0ZXIgUG9saWN5JztcbiAgICAgICAgICAgICAgICBzZXJ2aWNlZXJwb2xpY3kucm9vdE5vZGUgPSAnWWVzJztcbiAgICAgICAgICAgICAgICBzZXJ2aWNlRWRnZVJvdXRlclBvbGljaWVzQ2hpbGRyZW4uY2hpbGRyZW4ucHVzaChzZXJ2aWNlZXJwb2xpY3kpO1xuICAgICAgICAgICAgfSAvLyBlbmQgb2YgbWFpbiBmb3IgbG9vcFxuICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2VFZGdlUm91dGVyUG9saWNpZXNDaGlsZHJlbjtcbiAgICAgICAgfSAvLyBlbmRcblxuICAgICAgICBmdW5jdGlvbiBwcm9jZXNzRWRnZVJvdXRlcnNGb3JUcmVlKFxuICAgICAgICAgICAgcm91dGVyc0NoaWxkcmVuLFxuICAgICAgICAgICAgZWRnZXJvdXRlcnMsXG4gICAgICAgICAgICBueCxcbiAgICAgICAgICAgIG55XG4gICAgICAgICkge1xuICAgICAgICBpZihhcmdzWzNdPT09ZmFsc2UpIHJldHVybiByb3V0ZXJzQ2hpbGRyZW47XG5cbiAgICAgICAgICAgIGNvbnN0IGVyX29iamVjdHMgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBueDsgaSA8IG55OyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlck9iID0gbmV3IEVSb3V0ZXIoKTtcbiAgICAgICAgICAgICAgICBlck9iLmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlciA9IGVkZ2Vyb3V0ZXJzW2ldO1xuICAgICAgICAgICAgICAgIGlmIChlcikge1xuICAgICAgICAgICAgICAgICAgICBlck9iLnV1aWQgPSBlci5pZDtcbiAgICAgICAgICAgICAgICAgICAgZXJPYi5uYW1lID0gZXIubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgZXJPYi52ZXJpZmllZCA9IGVyLmlzVmVyaWZpZWQ/ICdZZXMnOiAnTm8nO1xuICAgICAgICAgICAgICAgICAgICAvL2VyT2IudmVyc2lvbiA9IGVyLnByb2R1Y3RWZXJzaW9uO1xuICAgICAgICAgICAgICAgICAgICBlck9iLm9ubGluZSA9IGVyLmlzT25saW5lPyAnWWVzJzogJ05vJztcbiAgICAgICAgICAgICAgICAgICAgZXJPYi5kaXNhYmxlZCA9IGVyLmRpc2FibGVkPyAnWWVzJzogJ05vJztcbiAgICAgICAgICAgICAgICAgICAgZXJPYi50eXBlID0gJ0VkZ2UgUm91dGVyJztcbiAgICAgICAgICAgICAgICAgICAgZXJPYi5yb290Tm9kZSA9ICdZZXMnO1xuICAgICAgICAgICAgICAgICAgICBlck9iLnR1bm5lbGVyRW5hYmxlZCA9IGVyLnR1bm5lbGVyRW5hYmxlZD8gZXIudHVubmVsZXJFbmFibGVkOiAnTm8nO1xuICAgICAgICAgICAgICAgICAgICBlck9iLnN5bmNTdGF0dXMgPSBlci5zeW5jU3RhdHVzPyBlci5zeW5jU3RhdHVzOidObyc7XG4gICAgICAgICAgICAgICAgICAgIGVyT2IuY3JlYXRlZEF0ID0gZXIuY3JlYXRlZEF0O1xuICAgICAgICAgICAgICAgICAgICBlck9iLnVwZGF0ZWRBdCA9IGVyLnVwZGF0ZWRBdDtcbiAgICAgICAgICAgICAgICAgICAgZXJfb2JqZWN0cy5wdXNoKGVyT2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gLy8gZW5kIG1haW4gZm9yIGxvb3BcbiAgICAgICAgICAgLy8gcmV0dXJuIHJvdXRlcnNDaGlsZHJlbjtcbiAgICAgICAgICAgcmV0dXJuIGdyb3VwaW5nKCdFZGdlIFJvdXRlcicsIHJvdXRlcnNDaGlsZHJlbiwgZXJfb2JqZWN0cyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjcmVhdGVJZCgpIGdlbmVyYXRlcyBub2RlIElkIDEsMiwzLDQsNSBmb3IgdGhlIGZvbGxvd2luZyBmaXZlIG5vZGVzLiB0aGlzIGlkIGlzIHVzZWQgdG8gc2VhcmNoIGNhcGFiaWxpdHkuXG4gICAgICAgIGxldCBzZXJ2aWNQb2xpY2llc0NoaWxkcmVuID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgIHNlcnZpY1BvbGljaWVzQ2hpbGRyZW4uaWQgPSBjcmVhdGVJZCgpO1xuICAgICAgICBzZXJ2aWNQb2xpY2llc0NoaWxkcmVuLmZpcnN0Q2hpbGQgPSAnWWVzJztcbiAgICAgICAgc2VydmljUG9saWNpZXNDaGlsZHJlbi5uYW1lID0gJ1NlcnZpY2UgUG9saWNpZXMoJysgc2VydmljZV9wb2xpY2llc190b3RhbENvdW50ICsnKSc7XG5cbiAgICAgICAgbGV0IHNlcnZpY2VzQ2hpbGRyZW4gPSBuZXcgQ2hpbGRyZW4oKTtcbiAgICAgICAgc2VydmljZXNDaGlsZHJlbi5pZCA9IGNyZWF0ZUlkKCk7XG4gICAgICAgIHNlcnZpY2VzQ2hpbGRyZW4uZmlyc3RDaGlsZCA9ICdZZXMnO1xuICAgICAgICBzZXJ2aWNlc0NoaWxkcmVuLm5hbWUgPSAnU2VydmljZXMoJysgc2VydmljZXNfdG90YWxDb3VudCArJyknO1xuXG4gICAgICAgIGxldCBpZGVudGl0aWVzQ2hpbGRyZW4gPSBuZXcgQ2hpbGRyZW4oKTtcbiAgICAgICAgaWRlbnRpdGllc0NoaWxkcmVuLmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgaWRlbnRpdGllc0NoaWxkcmVuLmZpcnN0Q2hpbGQgPSAnWWVzJztcbiAgICAgICAgaWRlbnRpdGllc0NoaWxkcmVuLm5hbWUgPSAnSWRlbnRpdGllcygnKyBpZGVudGl0aWVzX3RvdGFsQ291bnQgKycpJztcblxuICAgICAgICBsZXQgZWRnZXJvdXRlckNoaWxkcmVuID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgIGVkZ2Vyb3V0ZXJDaGlsZHJlbi5pZCA9IGNyZWF0ZUlkKCk7XG4gICAgICAgIGVkZ2Vyb3V0ZXJDaGlsZHJlbi5maXJzdENoaWxkID0gJ1llcyc7XG4gICAgICAgIGVkZ2Vyb3V0ZXJDaGlsZHJlbi5uYW1lID0gJ0VkZ2UgUm91dGVycygnKyBlZGdlcm91dGVyc190b3RhbENvdW50ICsnKSc7XG5cbiAgICAgICAgbGV0IGVkZ2VSb3V0ZXJQb2xpY2llc0NoaWxkcmVuID0gbmV3IENoaWxkcmVuKCk7XG4gICAgICAgIGVkZ2VSb3V0ZXJQb2xpY2llc0NoaWxkcmVuLmlkID0gY3JlYXRlSWQoKTtcbiAgICAgICAgZWRnZVJvdXRlclBvbGljaWVzQ2hpbGRyZW4uZmlyc3RDaGlsZCA9ICdZZXMnO1xuICAgICAgICBlZGdlUm91dGVyUG9saWNpZXNDaGlsZHJlbi5uYW1lID0gJ0VkZ2UgUm91dGVyIFBvbGljaWVzKCcrIGVkZ2Vfcm91dGVyX3BvbGljaWVzX3RvdGFsQ291bnQgKycpJztcblxuICAgICAgICBsZXQgc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2VzQ2hpbGRyZW4gPSBuZXcgQ2hpbGRyZW4oKTtcbiAgICAgICAgc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2VzQ2hpbGRyZW4uaWQgPSBjcmVhdGVJZCgpO1xuICAgICAgICBzZXJ2aWNlRWRnZVJvdXRlclBvbGljZXNDaGlsZHJlbi5maXJzdENoaWxkID0gJ1llcyc7XG4gICAgICAgIHNlcnZpY2VFZGdlUm91dGVyUG9saWNlc0NoaWxkcmVuLm5hbWUgPSAnU2VydmljZSBFZGdlIFJvdXRlciBQb2xpY2llcygnKyBzZXJ2aWNlX3JvdXRlcl9wb2xpY2llc190b3RhbENvdW50ICsnKSc7XG5cbiAgICAgICAgc2VydmljZXNDaGlsZHJlbiA9IHByb2Nlc3NTZXJ2aWNlc0ZvclRyZWUoXG4gICAgICAgICAgICBzZXJ2aWNlc0NoaWxkcmVuLFxuICAgICAgICAgICAgc2VydmljZXMsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgc2VydmljZXMubGVuZ3RoXG4gICAgICAgICk7XG5cbiAgICAgICAgZWRnZXJvdXRlckNoaWxkcmVuID0gcHJvY2Vzc0VkZ2VSb3V0ZXJzRm9yVHJlZShcbiAgICAgICAgICAgIGVkZ2Vyb3V0ZXJDaGlsZHJlbixcbiAgICAgICAgICAgIGVkZ2Vyb3V0ZXJzLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIGVkZ2Vyb3V0ZXJzLmxlbmd0aFxuICAgICAgICApO1xuXG4gICAgICAgIHNlcnZpY1BvbGljaWVzQ2hpbGRyZW4gPSBwcm9jZXNzU2VydmljZVBvbGljaWVzRm9yVHJlZShcbiAgICAgICAgICAgIHNlcnZpY1BvbGljaWVzQ2hpbGRyZW4sXG4gICAgICAgICAgICBzZXJ2aWNlUG9saWNpZXMsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgc2VydmljZVBvbGljaWVzLmxlbmd0aFxuICAgICAgICApO1xuXG4gICAgICAgIGVkZ2VSb3V0ZXJQb2xpY2llc0NoaWxkcmVuID0gcHJvY2Vzc0VkZ2VSb3V0ZXJQb2xpY2llc0ZvclRyZWUoXG4gICAgICAgICAgICBlZGdlUm91dGVyUG9saWNpZXNDaGlsZHJlbixcbiAgICAgICAgICAgIGVkZ2VSb3V0ZXJQb2xpY2llcyxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBlZGdlUm91dGVyUG9saWNpZXMubGVuZ3RoXG4gICAgICAgICk7XG5cbiAgICAgICAgaWRlbnRpdGllc0NoaWxkcmVuID0gcHJvY2Vzc0lkZW50aXRpZXNGb3JUcmVlKFxuICAgICAgICAgICAgaWRlbnRpdGllc0NoaWxkcmVuLFxuICAgICAgICAgICAgaWRlbnRpdGllcyxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBpZGVudGl0aWVzLmxlbmd0aFxuICAgICAgICApO1xuICAgICAgICAvL3NlcnZpY2VSb3V0ZXJQb2xpY2llc1xuICAgICAgICBzZXJ2aWNlRWRnZVJvdXRlclBvbGljZXNDaGlsZHJlbiA9IHByb2Nlc3NTZXJ2aWNlRWRnZVJvdXRlclBvbGljaWVzRm9yVHJlZShcbiAgICAgICAgICAgIHNlcnZpY2VFZGdlUm91dGVyUG9saWNlc0NoaWxkcmVuLFxuICAgICAgICAgICAgc2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llcyxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBzZXJ2aWNlRWRnZVJvdXRlclBvbGljaWVzLmxlbmd0aFxuICAgICAgICApO1xuXG4gICAgICAgIHJvb3RKc29uLmNoaWxkcmVuLnB1c2goc2VydmljUG9saWNpZXNDaGlsZHJlbik7XG4gICAgICAgIHJvb3RKc29uLmNoaWxkcmVuLnB1c2goc2VydmljZXNDaGlsZHJlbik7XG4gICAgICAgIHJvb3RKc29uLmNoaWxkcmVuLnB1c2goaWRlbnRpdGllc0NoaWxkcmVuKTtcbiAgICAgICAgcm9vdEpzb24uY2hpbGRyZW4ucHVzaChlZGdlcm91dGVyQ2hpbGRyZW4pO1xuICAgICAgICByb290SnNvbi5jaGlsZHJlbi5wdXNoKGVkZ2VSb3V0ZXJQb2xpY2llc0NoaWxkcmVuKTtcbiAgICAgICAgcm9vdEpzb24uY2hpbGRyZW4ucHVzaChzZXJ2aWNlRWRnZVJvdXRlclBvbGljZXNDaGlsZHJlbik7XG4gICAgICAgIHJvb3RKc29uLmxhc3RJZCA9IHVuaXFJZDtcblxuICAgICAgICByZXR1cm4gcm9vdEpzb247XG4gICAgfVxuXG59XG4iXX0=