@openziti/ziti-console-lib 0.12.11 → 1.0.1

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 (450) hide show
  1. package/assets/fonts/icomoon.eot +0 -0
  2. package/assets/fonts/icomoon.svg +6 -1
  3. package/assets/fonts/icomoon.ttf +0 -0
  4. package/assets/fonts/icomoon.woff +0 -0
  5. package/assets/fonts/icomoon.woff2 +0 -0
  6. package/assets/styles/dark.css +15 -8
  7. package/assets/styles/global.scss +431 -24
  8. package/assets/styles/icons.scss +644 -0
  9. package/assets/svgs/Icon_Log_Logout.svg +43 -0
  10. package/assets/svgs/clients.svg +6 -0
  11. package/assets/svgs/ziti-logo.svg +23 -0
  12. package/esm2022/lib/ZAC_VERSION.mjs +4 -0
  13. package/esm2022/lib/default-app-config.mjs +5 -0
  14. package/esm2022/lib/features/card/card.component.mjs +4 -5
  15. package/esm2022/lib/features/card-list/card-list.component.mjs +2 -4
  16. package/esm2022/lib/features/config-editor/config-editor.component.mjs +2 -3
  17. package/esm2022/lib/features/confirm/confirm.component.mjs +4 -5
  18. package/esm2022/lib/features/creation-summary-dialog/creation-summary-dialog.component.mjs +2 -3
  19. package/esm2022/lib/features/custom-tags/custom-tags.component.mjs +4 -5
  20. package/esm2022/lib/features/data-table/cells/table-cell-menu/table-cell-menu.component.mjs +2 -3
  21. package/esm2022/lib/features/data-table/cells/table-cell-name/table-cell-name.component.mjs +2 -3
  22. package/esm2022/lib/features/data-table/cells/table-cell-select/table-cell-select.component.mjs +4 -5
  23. package/esm2022/lib/features/data-table/cells/table-cell-token/table-cell-token.component.mjs +2 -3
  24. package/esm2022/lib/features/data-table/column-headers/table-column-default/table-column-default.component.mjs +2 -3
  25. package/esm2022/lib/features/data-table/column-headers/table-column-filter/table-column-filter.component.mjs +2 -3
  26. package/esm2022/lib/features/data-table/column-headers/table-column-menu/table-column-menu.component.mjs +2 -3
  27. package/esm2022/lib/features/data-table/column-headers/table-column-select/table-column-select.component.mjs +4 -5
  28. package/esm2022/lib/features/data-table/data-table-filter.service.mjs +2 -3
  29. package/esm2022/lib/features/data-table/data-table.component.mjs +4 -5
  30. package/esm2022/lib/features/data-table/data-table.service.mjs +2 -3
  31. package/esm2022/lib/features/data-table/table-filter-bar/filter-bar.component.mjs +4 -5
  32. package/esm2022/lib/features/data-table/table-hidden-columns-bar/hidden-columns-bar.component.mjs +2 -3
  33. package/esm2022/lib/features/data-table/tooltips/os-tooltip.component.mjs +2 -3
  34. package/esm2022/lib/features/data-table/tooltips/sdk-tooltip.component.mjs +2 -3
  35. package/esm2022/lib/features/dynamic-widgets/boolean/boolean-toggle-input.component.mjs +2 -3
  36. package/esm2022/lib/features/dynamic-widgets/checkbox-list/checkbox-list-input.component.mjs +2 -3
  37. package/esm2022/lib/features/dynamic-widgets/forwarding-config/forwarding-config.component.mjs +2 -3
  38. package/esm2022/lib/features/dynamic-widgets/forwarding-config/forwarding-config.service.mjs +2 -3
  39. package/esm2022/lib/features/dynamic-widgets/number/number-input.component.mjs +2 -3
  40. package/esm2022/lib/features/dynamic-widgets/object/object.component.mjs +4 -5
  41. package/esm2022/lib/features/dynamic-widgets/password/password-input.component.mjs +2 -3
  42. package/esm2022/lib/features/dynamic-widgets/port-ranges/port-ranges.component.mjs +2 -3
  43. package/esm2022/lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component.mjs +2 -3
  44. package/esm2022/lib/features/dynamic-widgets/selector/selector-input.component.mjs +2 -3
  45. package/esm2022/lib/features/dynamic-widgets/string/string-input.component.mjs +2 -3
  46. package/esm2022/lib/features/dynamic-widgets/text-list/text-list-input.component.mjs +2 -3
  47. package/esm2022/lib/features/extendable/extendable.component.mjs +2 -3
  48. package/esm2022/lib/features/extendable/extensions-noop.service.mjs +3 -3
  49. package/esm2022/lib/features/header-bar/header-bar.component.mjs +105 -0
  50. package/esm2022/lib/features/json-view/json-view.component.mjs +4 -5
  51. package/esm2022/lib/features/list-page-features/list-page-form/list-page-form.component.mjs +2 -3
  52. package/esm2022/lib/features/list-page-features/list-page-header/list-page-header.component.mjs +4 -5
  53. package/esm2022/lib/features/loading-indicator/loading-indicator.component.mjs +2 -3
  54. package/esm2022/lib/features/login/login-dialog.component.mjs +10 -12
  55. package/esm2022/lib/features/messaging/growler.component.mjs +4 -5
  56. package/esm2022/lib/features/messaging/growler.module.mjs +2 -3
  57. package/esm2022/lib/features/messaging/growler.service.mjs +2 -3
  58. package/esm2022/lib/features/messaging/logger.service.mjs +2 -3
  59. package/esm2022/lib/features/multi-action-button/multi-action-button.component.mjs +2 -3
  60. package/esm2022/lib/features/no-items/no-items.component.mjs +2 -3
  61. package/esm2022/lib/features/overrides/overrides.component.mjs +2 -3
  62. package/esm2022/lib/features/overrides/overrides.service.mjs +2 -3
  63. package/esm2022/lib/features/preview-list/preview-list.component.mjs +4 -5
  64. package/esm2022/lib/features/preview-selections/preview-selections.component.mjs +2 -3
  65. package/esm2022/lib/features/progress-meter/progress-meter.component.mjs +2 -3
  66. package/esm2022/lib/features/progress-wizard/progress-wizard.component.mjs +2 -3
  67. package/esm2022/lib/features/projectable-forms/api-session/api-session-form.component.mjs +5 -9
  68. package/esm2022/lib/features/projectable-forms/api-session/api-session-form.service.mjs +2 -3
  69. package/esm2022/lib/features/projectable-forms/auth-policy/auth-policy-form.component.mjs +5 -9
  70. package/esm2022/lib/features/projectable-forms/auth-policy/auth-policy-form.service.mjs +2 -3
  71. package/esm2022/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.mjs +5 -9
  72. package/esm2022/lib/features/projectable-forms/certificate-authority/certificate-authority-form.service.mjs +2 -3
  73. package/esm2022/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.mjs +4 -8
  74. package/esm2022/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.service.mjs +2 -3
  75. package/esm2022/lib/features/projectable-forms/config-type/config-type-form.component.mjs +5 -9
  76. package/esm2022/lib/features/projectable-forms/config-type/config-type-form.service.mjs +2 -3
  77. package/esm2022/lib/features/projectable-forms/configuration/configuration-form.component.mjs +5 -9
  78. package/esm2022/lib/features/projectable-forms/configuration/configuration.service.mjs +2 -3
  79. package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.component.mjs +34 -26
  80. package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.service.mjs +2 -3
  81. package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.mjs +13 -14
  82. package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.mjs +6 -7
  83. package/esm2022/lib/features/projectable-forms/form-field-container/form-field-container.component.mjs +4 -5
  84. package/esm2022/lib/features/projectable-forms/form-field-toggle/form-field-toggle.component.mjs +4 -5
  85. package/esm2022/lib/features/projectable-forms/form-header/form-header.component.mjs +4 -5
  86. package/esm2022/lib/features/projectable-forms/identity/identity-form.component.mjs +6 -12
  87. package/esm2022/lib/features/projectable-forms/identity/identity-form.service.mjs +2 -3
  88. package/esm2022/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.mjs +5 -12
  89. package/esm2022/lib/features/projectable-forms/jwt-signer/jwt-signer-form.service.mjs +2 -3
  90. package/esm2022/lib/features/projectable-forms/posture-check/posture-check-form.component.mjs +5 -9
  91. package/esm2022/lib/features/projectable-forms/posture-check/posture-check-form.service.mjs +2 -3
  92. package/esm2022/lib/features/projectable-forms/projectable-form.class.mjs +36 -74
  93. package/esm2022/lib/features/projectable-forms/service/service-form.component.mjs +5 -8
  94. package/esm2022/lib/features/projectable-forms/service/service-form.service.mjs +2 -3
  95. package/esm2022/lib/features/projectable-forms/service/simple-service/simple-service.component.mjs +57 -24
  96. package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.mjs +13 -14
  97. package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.mjs +6 -7
  98. package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.component.mjs +14 -15
  99. package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.service.mjs +9 -10
  100. package/esm2022/lib/features/projectable-forms/session/session-form.component.mjs +5 -9
  101. package/esm2022/lib/features/projectable-forms/session/session-form.service.mjs +2 -3
  102. package/esm2022/lib/features/projectable-forms/terminator/terminator-form.component.mjs +4 -8
  103. package/esm2022/lib/features/projectable-forms/terminator/terminator-form.service.mjs +2 -3
  104. package/esm2022/lib/features/projectable-forms/transit-router/transit-router-form.component.mjs +7 -11
  105. package/esm2022/lib/features/projectable-forms/transit-router/transit-router-form.service.mjs +2 -3
  106. package/esm2022/lib/features/qr-code/qr-code.component.mjs +4 -5
  107. package/esm2022/lib/features/quick-add/quick-add.component.mjs +50 -0
  108. package/esm2022/lib/features/reset-enrollment/reset-enrollment.component.mjs +4 -5
  109. package/esm2022/lib/features/reset-enrollment/reset-enrollment.service.mjs +2 -3
  110. package/esm2022/lib/features/side-modal/side-modal.component.mjs +2 -3
  111. package/esm2022/lib/features/side-navigator/side-navigator.component.mjs +127 -0
  112. package/esm2022/lib/features/sidebars/side-navbar/side-navbar.component.mjs +4 -5
  113. package/esm2022/lib/features/tag-selector/tag-selector.component.mjs +4 -5
  114. package/esm2022/lib/features/visualizer/identity-service-path/identity-service-path.component.mjs +2 -3
  115. package/esm2022/lib/features/visualizer/identity-service-path/identity-service-path.helper.mjs +2 -3
  116. package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.component.mjs +2 -3
  117. package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.helper.mjs +2 -3
  118. package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.treenodeprocessor.mjs +2 -3
  119. package/esm2022/lib/features/visualizer/visualizer-service.class.mjs +2 -3
  120. package/esm2022/lib/pages/api-sessions/api-sessions-page.component.mjs +2 -3
  121. package/esm2022/lib/pages/api-sessions/api-sessions-page.service.mjs +2 -3
  122. package/esm2022/lib/pages/attributes/attributes.component.mjs +104 -0
  123. package/esm2022/lib/pages/auth-policies/auth-policies-page.component.mjs +2 -3
  124. package/esm2022/lib/pages/auth-policies/auth-policies-page.service.mjs +4 -4
  125. package/esm2022/lib/pages/callback/callback.component.mjs +2 -3
  126. package/esm2022/lib/pages/certificate-authorities/certificate-authorities-page.component.mjs +2 -3
  127. package/esm2022/lib/pages/certificate-authorities/certificate-authorities-page.service.mjs +2 -3
  128. package/esm2022/lib/pages/config-types/config-types-page.component.mjs +2 -3
  129. package/esm2022/lib/pages/config-types/config-types-page.service.mjs +2 -3
  130. package/esm2022/lib/pages/configurations/configurations-page.component.mjs +2 -3
  131. package/esm2022/lib/pages/configurations/configurations-page.service.mjs +2 -3
  132. package/esm2022/lib/pages/edge-router-policies/edge-router-policies-page.component.mjs +6 -13
  133. package/esm2022/lib/pages/edge-router-policies/edge-router-policies-page.service.mjs +2 -3
  134. package/esm2022/lib/pages/edge-routers/edge-routers-page.component.mjs +5 -16
  135. package/esm2022/lib/pages/edge-routers/edge-routers-page.service.mjs +2 -4
  136. package/esm2022/lib/pages/geolocate/geolocate.component.mjs +130 -0
  137. package/esm2022/lib/pages/identities/identities-page.component.mjs +5 -16
  138. package/esm2022/lib/pages/identities/identities-page.service.mjs +2 -3
  139. package/esm2022/lib/pages/jwt-signers/jwt-signers-page.component.mjs +2 -3
  140. package/esm2022/lib/pages/jwt-signers/jwt-signers-page.service.mjs +2 -3
  141. package/esm2022/lib/pages/posture-checks/posture-checks-page.component.mjs +3 -4
  142. package/esm2022/lib/pages/posture-checks/posture-checks-page.service.mjs +2 -3
  143. package/esm2022/lib/pages/profile/profile.component.mjs +58 -0
  144. package/esm2022/lib/pages/service-edge-router-policies/service-edge-router-policies-page.component.mjs +6 -13
  145. package/esm2022/lib/pages/service-edge-router-policies/service-edge-router-policies-page.service.mjs +2 -3
  146. package/esm2022/lib/pages/service-policies/service-policies-page.component.mjs +6 -13
  147. package/esm2022/lib/pages/service-policies/service-policies-page.service.mjs +2 -3
  148. package/esm2022/lib/pages/services/services-page.component.mjs +6 -13
  149. package/esm2022/lib/pages/services/services-page.service.mjs +2 -3
  150. package/esm2022/lib/pages/sessions/sessions-page.component.mjs +2 -3
  151. package/esm2022/lib/pages/sessions/sessions-page.service.mjs +2 -3
  152. package/esm2022/lib/pages/settings/settings.component.mjs +61 -0
  153. package/esm2022/lib/pages/terminators/terminators-page.component.mjs +3 -4
  154. package/esm2022/lib/pages/terminators/terminators-page.service.mjs +2 -3
  155. package/esm2022/lib/pages/transit-routers/transit-routers-page.component.mjs +5 -16
  156. package/esm2022/lib/pages/transit-routers/transit-routers-page.service.mjs +2 -3
  157. package/esm2022/lib/safe.pipe.mjs +2 -3
  158. package/esm2022/lib/services/auth.service.mjs +2 -3
  159. package/esm2022/lib/services/console-events.service.mjs +2 -14
  160. package/esm2022/lib/services/csv-download.service.mjs +2 -3
  161. package/esm2022/lib/services/deactivate-guard.service.mjs +2 -3
  162. package/esm2022/lib/services/login-service.class.mjs +2 -3
  163. package/esm2022/lib/services/node-data.service.mjs +24 -3
  164. package/esm2022/lib/services/noop-login.service.mjs +2 -3
  165. package/esm2022/lib/services/schema.service.mjs +2 -3
  166. package/esm2022/lib/services/settings-service.class.mjs +5 -18
  167. package/esm2022/lib/services/settings.service.mjs +14 -11
  168. package/esm2022/lib/services/tab-name.service.mjs +9 -6
  169. package/esm2022/lib/services/validation.service.mjs +2 -3
  170. package/esm2022/lib/services/ziti-controller-data.service.mjs +21 -6
  171. package/esm2022/lib/services/ziti-data.service.mjs +5 -5
  172. package/esm2022/lib/shared/list-page-component.class.mjs +6 -3
  173. package/esm2022/lib/shared/list-page-service.class.mjs +2 -3
  174. package/esm2022/lib/zac-routing.module.mjs +3 -10
  175. package/esm2022/lib/ziti-console-lib.module.mjs +43 -24
  176. package/esm2022/lib/ziti-console.constants.mjs +2 -1
  177. package/esm2022/public-api.mjs +9 -8
  178. package/fesm2022/openziti-ziti-console-lib.mjs +3547 -4342
  179. package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
  180. package/lib/ZAC_VERSION.d.ts +4 -0
  181. package/lib/ZAC_VERSION.d.ts.map +1 -0
  182. package/lib/default-app-config.d.ts +9 -0
  183. package/lib/default-app-config.d.ts.map +1 -0
  184. package/lib/features/card-list/card-list.component.d.ts +0 -1
  185. package/lib/features/card-list/card-list.component.d.ts.map +1 -1
  186. package/lib/features/extendable/extensions-noop.service.d.ts +2 -0
  187. package/lib/features/extendable/extensions-noop.service.d.ts.map +1 -1
  188. package/lib/features/header-bar/header-bar.component.d.ts +29 -0
  189. package/lib/features/header-bar/header-bar.component.d.ts.map +1 -0
  190. package/lib/features/login/login-dialog.component.d.ts +2 -1
  191. package/lib/features/login/login-dialog.component.d.ts.map +1 -1
  192. package/lib/features/projectable-forms/api-session/api-session-form.component.d.ts +1 -2
  193. package/lib/features/projectable-forms/api-session/api-session-form.component.d.ts.map +1 -1
  194. package/lib/features/projectable-forms/auth-policy/auth-policy-form.component.d.ts +1 -2
  195. package/lib/features/projectable-forms/auth-policy/auth-policy-form.component.d.ts.map +1 -1
  196. package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.d.ts +1 -2
  197. package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.d.ts.map +1 -1
  198. package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.d.ts +1 -2
  199. package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.d.ts.map +1 -1
  200. package/lib/features/projectable-forms/config-type/config-type-form.component.d.ts +1 -2
  201. package/lib/features/projectable-forms/config-type/config-type-form.component.d.ts.map +1 -1
  202. package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts +1 -2
  203. package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts.map +1 -1
  204. package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts +6 -3
  205. package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts.map +1 -1
  206. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts +2 -2
  207. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts.map +1 -1
  208. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.d.ts +2 -2
  209. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.d.ts.map +1 -1
  210. package/lib/features/projectable-forms/identity/identity-form.component.d.ts +1 -2
  211. package/lib/features/projectable-forms/identity/identity-form.component.d.ts.map +1 -1
  212. package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.d.ts +1 -2
  213. package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.d.ts.map +1 -1
  214. package/lib/features/projectable-forms/posture-check/posture-check-form.component.d.ts +1 -2
  215. package/lib/features/projectable-forms/posture-check/posture-check-form.component.d.ts.map +1 -1
  216. package/lib/features/projectable-forms/projectable-form.class.d.ts +11 -7
  217. package/lib/features/projectable-forms/projectable-form.class.d.ts.map +1 -1
  218. package/lib/features/projectable-forms/service/service-form.component.d.ts +0 -1
  219. package/lib/features/projectable-forms/service/service-form.component.d.ts.map +1 -1
  220. package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts +9 -2
  221. package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts.map +1 -1
  222. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts +2 -2
  223. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts.map +1 -1
  224. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.d.ts +2 -2
  225. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.d.ts.map +1 -1
  226. package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts +2 -2
  227. package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts.map +1 -1
  228. package/lib/features/projectable-forms/service-policy/service-policy-form.service.d.ts +4 -4
  229. package/lib/features/projectable-forms/service-policy/service-policy-form.service.d.ts.map +1 -1
  230. package/lib/features/projectable-forms/session/session-form.component.d.ts +1 -2
  231. package/lib/features/projectable-forms/session/session-form.component.d.ts.map +1 -1
  232. package/lib/features/projectable-forms/terminator/terminator-form.component.d.ts +1 -2
  233. package/lib/features/projectable-forms/terminator/terminator-form.component.d.ts.map +1 -1
  234. package/lib/features/projectable-forms/transit-router/transit-router-form.component.d.ts +1 -2
  235. package/lib/features/projectable-forms/transit-router/transit-router-form.component.d.ts.map +1 -1
  236. package/lib/features/quick-add/quick-add.component.d.ts +15 -0
  237. package/lib/features/quick-add/quick-add.component.d.ts.map +1 -0
  238. package/lib/features/side-navigator/side-navigator.component.d.ts +33 -0
  239. package/lib/features/side-navigator/side-navigator.component.d.ts.map +1 -0
  240. package/lib/pages/attributes/attributes.component.d.ts +31 -0
  241. package/lib/pages/attributes/attributes.component.d.ts.map +1 -0
  242. package/lib/pages/auth-policies/auth-policies-page.service.d.ts.map +1 -1
  243. package/lib/pages/edge-router-policies/edge-router-policies-page.component.d.ts +1 -3
  244. package/lib/pages/edge-router-policies/edge-router-policies-page.component.d.ts.map +1 -1
  245. package/lib/pages/edge-routers/edge-routers-page.component.d.ts +1 -3
  246. package/lib/pages/edge-routers/edge-routers-page.component.d.ts.map +1 -1
  247. package/lib/pages/edge-routers/edge-routers-page.service.d.ts.map +1 -1
  248. package/lib/pages/geolocate/geolocate.component.d.ts +32 -0
  249. package/lib/pages/geolocate/geolocate.component.d.ts.map +1 -0
  250. package/lib/pages/identities/identities-page.component.d.ts +1 -3
  251. package/lib/pages/identities/identities-page.component.d.ts.map +1 -1
  252. package/lib/pages/profile/profile.component.d.ts +17 -0
  253. package/lib/pages/profile/profile.component.d.ts.map +1 -0
  254. package/lib/pages/service-edge-router-policies/service-edge-router-policies-page.component.d.ts +1 -3
  255. package/lib/pages/service-edge-router-policies/service-edge-router-policies-page.component.d.ts.map +1 -1
  256. package/lib/pages/service-policies/service-policies-page.component.d.ts +1 -3
  257. package/lib/pages/service-policies/service-policies-page.component.d.ts.map +1 -1
  258. package/lib/pages/services/services-page.component.d.ts +1 -3
  259. package/lib/pages/services/services-page.component.d.ts.map +1 -1
  260. package/lib/pages/settings/settings.component.d.ts +23 -0
  261. package/lib/pages/settings/settings.component.d.ts.map +1 -0
  262. package/lib/pages/transit-routers/transit-routers-page.component.d.ts +1 -3
  263. package/lib/pages/transit-routers/transit-routers-page.component.d.ts.map +1 -1
  264. package/lib/services/console-events.service.d.ts.map +1 -1
  265. package/lib/services/node-data.service.d.ts +1 -0
  266. package/lib/services/node-data.service.d.ts.map +1 -1
  267. package/lib/services/settings-service.class.d.ts +0 -2
  268. package/lib/services/settings-service.class.d.ts.map +1 -1
  269. package/lib/services/settings.service.d.ts.map +1 -1
  270. package/lib/services/tab-name.service.d.ts.map +1 -1
  271. package/lib/services/ziti-controller-data.service.d.ts +2 -1
  272. package/lib/services/ziti-controller-data.service.d.ts.map +1 -1
  273. package/lib/services/ziti-data.service.d.ts +2 -1
  274. package/lib/services/ziti-data.service.d.ts.map +1 -1
  275. package/lib/shared/list-page-component.class.d.ts.map +1 -1
  276. package/lib/zac-routing.module.d.ts.map +1 -1
  277. package/lib/ziti-console-lib.module.d.ts +114 -110
  278. package/lib/ziti-console-lib.module.d.ts.map +1 -1
  279. package/lib/ziti-console.constants.d.ts +1 -0
  280. package/lib/ziti-console.constants.d.ts.map +1 -1
  281. package/package.json +1 -1
  282. package/public-api.d.ts +8 -7
  283. package/public-api.d.ts.map +1 -1
  284. package/assets/components/add.html +0 -1
  285. package/assets/components/api.html +0 -12
  286. package/assets/components/customtags.html +0 -4
  287. package/assets/components/line.html +0 -1
  288. package/assets/components/noitems.html +0 -1
  289. package/assets/components/save.html +0 -4
  290. package/assets/components/search.html +0 -8
  291. package/assets/components/tabIdentities.html +0 -5
  292. package/assets/components/tabPolicies.html +0 -7
  293. package/assets/components/tabRouters.html +0 -5
  294. package/assets/components/tabServers.html +0 -4
  295. package/assets/components/tabServices.html +0 -6
  296. package/assets/components/tabSessions.html +0 -4
  297. package/assets/data/mail.json +0 -0
  298. package/assets/data/services.json +0 -6
  299. package/assets/data/site.json +0 -31
  300. package/assets/data/tags.json +0 -7
  301. package/assets/data/templates.json +0 -1
  302. package/assets/fonts/zac.eot +0 -0
  303. package/assets/fonts/zac.svg +0 -57
  304. package/assets/fonts/zac.ttf +0 -0
  305. package/assets/fonts/zac.woff +0 -0
  306. package/assets/fonts/zac.woff2 +0 -0
  307. package/assets/html/api-sessions.htm +0 -152
  308. package/assets/html/attributes.htm +0 -260
  309. package/assets/html/auth-policies.htm +0 -410
  310. package/assets/html/cas.htm +0 -439
  311. package/assets/html/config-types.htm +0 -167
  312. package/assets/html/configs.htm +0 -238
  313. package/assets/html/deprecated/fabric-links.htm +0 -336
  314. package/assets/html/deprecated/fabric-routers.htm +0 -72
  315. package/assets/html/deprecated/fabric-services.htm +0 -494
  316. package/assets/html/identities.htm +0 -934
  317. package/assets/html/index.htm +0 -222
  318. package/assets/html/jwt-signers.htm +0 -260
  319. package/assets/html/known.htm +0 -115
  320. package/assets/html/login.htm +0 -131
  321. package/assets/html/organization.htm +0 -223
  322. package/assets/html/posture-checks.htm +0 -393
  323. package/assets/html/profile.htm +0 -52
  324. package/assets/html/recipes.htm +0 -455
  325. package/assets/html/router-policies.htm +0 -168
  326. package/assets/html/routers.htm +0 -323
  327. package/assets/html/servers.htm +0 -236
  328. package/assets/html/service-policies.htm +0 -197
  329. package/assets/html/service-router-policies.htm +0 -170
  330. package/assets/html/services.htm +0 -634
  331. package/assets/html/sessions.htm +0 -157
  332. package/assets/html/settings.htm +0 -146
  333. package/assets/html/terminators.htm +0 -244
  334. package/assets/html/transit-routers.htm +0 -173
  335. package/assets/resources/avatar/man.svg +0 -78
  336. package/assets/resources/avatar/woman.svg +0 -96
  337. package/assets/resources/icon/analysis.svg +0 -104
  338. package/assets/resources/icon/appwans.svg +0 -20
  339. package/assets/resources/icon/architecture.svg +0 -1
  340. package/assets/resources/icon/bike.svg +0 -94
  341. package/assets/resources/icon/bus.svg +0 -64
  342. package/assets/resources/icon/cas.svg +0 -46
  343. package/assets/resources/icon/clusters.svg +0 -28
  344. package/assets/resources/icon/computer.svg +0 -1
  345. package/assets/resources/icon/data.svg +0 -1
  346. package/assets/resources/icon/delivery-truck.svg +0 -1
  347. package/assets/resources/icon/explosion.svg +0 -81
  348. package/assets/resources/icon/fabricServices.svg +0 -31
  349. package/assets/resources/icon/fabrics.svg +0 -136
  350. package/assets/resources/icon/front.svg +0 -83
  351. package/assets/resources/icon/gateway.svg +0 -49
  352. package/assets/resources/icon/gear.svg +0 -122
  353. package/assets/resources/icon/house.svg +0 -72
  354. package/assets/resources/icon/language.svg +0 -1
  355. package/assets/resources/icon/objective.svg +0 -55
  356. package/assets/resources/icon/route.svg +0 -97
  357. package/assets/resources/icon/routers.svg +0 -27
  358. package/assets/resources/icon/startup.svg +0 -112
  359. package/assets/resources/icon/switch.svg +0 -101
  360. package/assets/scripts/chart.min.js +0 -7
  361. package/assets/scripts/commands.js +0 -112
  362. package/assets/scripts/components/codemirror/codemirror.css +0 -356
  363. package/assets/scripts/components/codemirror/codemirror.js +0 -9741
  364. package/assets/scripts/components/codemirror/modes/addons/closetags.js +0 -200
  365. package/assets/scripts/components/codemirror/modes/addons/colorize.js +0 -40
  366. package/assets/scripts/components/codemirror/modes/addons/css-hint.js +0 -66
  367. package/assets/scripts/components/codemirror/modes/addons/formatting.js +0 -124
  368. package/assets/scripts/components/codemirror/modes/addons/html-hint.js +0 -366
  369. package/assets/scripts/components/codemirror/modes/addons/javascript-hint.js +0 -159
  370. package/assets/scripts/components/codemirror/modes/addons/show-hint.css +0 -36
  371. package/assets/scripts/components/codemirror/modes/addons/show-hint.js +0 -482
  372. package/assets/scripts/components/codemirror/modes/css.js +0 -831
  373. package/assets/scripts/components/codemirror/modes/htmlmixed.js +0 -152
  374. package/assets/scripts/components/codemirror/modes/javascript.js +0 -930
  375. package/assets/scripts/components/codemirror/modes/xml.js +0 -413
  376. package/assets/scripts/components/column.css +0 -184
  377. package/assets/scripts/components/column.js +0 -165
  378. package/assets/scripts/components/flows.css +0 -0
  379. package/assets/scripts/components/flows.js +0 -48
  380. package/assets/scripts/components/moment.js +0 -4602
  381. package/assets/scripts/components/multiselect.js +0 -333
  382. package/assets/scripts/components/resources.js +0 -26
  383. package/assets/scripts/components/selector-new.js +0 -300
  384. package/assets/scripts/components/selector.js +0 -300
  385. package/assets/scripts/components/spectrum.js +0 -2323
  386. package/assets/scripts/components/timezone.js +0 -1545
  387. package/assets/scripts/context.js +0 -177
  388. package/assets/scripts/dragging.js +0 -58
  389. package/assets/scripts/forms/forms.js +0 -74
  390. package/assets/scripts/forms/host.v1.htm +0 -43
  391. package/assets/scripts/forms/intercept.v1.htm +0 -0
  392. package/assets/scripts/forms/schema.js +0 -693
  393. package/assets/scripts/growler.js +0 -137
  394. package/assets/scripts/header.js +0 -163
  395. package/assets/scripts/jquery-3.6.3.min.js +0 -2
  396. package/assets/scripts/jquery.datetimepicker.js +0 -2930
  397. package/assets/scripts/locale.js +0 -47
  398. package/assets/scripts/modal.js +0 -65
  399. package/assets/scripts/model/data.js +0 -558
  400. package/assets/scripts/model/fabric.js +0 -55
  401. package/assets/scripts/model/fabricServices.js +0 -45
  402. package/assets/scripts/model/known.js +0 -43
  403. package/assets/scripts/model/links.js +0 -44
  404. package/assets/scripts/model/routers.js +0 -51
  405. package/assets/scripts/model/series.js +0 -70
  406. package/assets/scripts/model/sessions.js +0 -61
  407. package/assets/scripts/model/settings.js +0 -60
  408. package/assets/scripts/model/summary.js +0 -49
  409. package/assets/scripts/model/tags.js +0 -310
  410. package/assets/scripts/model/templates.js +0 -42
  411. package/assets/scripts/model/user.js +0 -40
  412. package/assets/scripts/restrictions.js +0 -34
  413. package/assets/scripts/service.js +0 -76
  414. package/assets/scripts/validation-tools.js +0 -5119
  415. package/assets/scripts/ziti.js +0 -372
  416. package/assets/styles/chart.min.css +0 -1
  417. package/assets/styles/datetimepicker.css +0 -1
  418. package/assets/styles/forms.css +0 -521
  419. package/assets/styles/growler.css +0 -190
  420. package/assets/styles/header.css +0 -232
  421. package/assets/styles/icons.css +0 -182
  422. package/assets/styles/navigation.css +0 -183
  423. package/assets/styles/select2.css +0 -481
  424. package/assets/styles/spectrum.css +0 -507
  425. package/assets/styles/tables.css +0 -449
  426. package/assets/styles/tooltip.css +0 -134
  427. package/assets/styles/ziti.css +0 -3271
  428. package/assets/templates/footer.htm +0 -183
  429. package/assets/templates/header.htm +0 -297
  430. package/esm2022/lib/features/sidebars/side-banner/side-banner.component.mjs +0 -17
  431. package/esm2022/lib/features/sidebars/side-toolbar/side-toolbar.component.mjs +0 -129
  432. package/esm2022/lib/features/wrappers/node-wrapper.service.mjs +0 -51
  433. package/esm2022/lib/features/wrappers/zac-wrapper-service.class.mjs +0 -95
  434. package/esm2022/lib/features/wrappers/zac-wrapper.component.mjs +0 -148
  435. package/esm2022/lib/features/wrappers/zac-wrapper.service.mjs +0 -981
  436. package/esm2022/lib/version.mjs +0 -4
  437. package/lib/features/sidebars/side-banner/side-banner.component.d.ts +0 -7
  438. package/lib/features/sidebars/side-banner/side-banner.component.d.ts.map +0 -1
  439. package/lib/features/sidebars/side-toolbar/side-toolbar.component.d.ts +0 -34
  440. package/lib/features/sidebars/side-toolbar/side-toolbar.component.d.ts.map +0 -1
  441. package/lib/features/wrappers/node-wrapper.service.d.ts +0 -24
  442. package/lib/features/wrappers/node-wrapper.service.d.ts.map +0 -1
  443. package/lib/features/wrappers/zac-wrapper-service.class.d.ts +0 -38
  444. package/lib/features/wrappers/zac-wrapper-service.class.d.ts.map +0 -1
  445. package/lib/features/wrappers/zac-wrapper.component.d.ts +0 -31
  446. package/lib/features/wrappers/zac-wrapper.component.d.ts.map +0 -1
  447. package/lib/features/wrappers/zac-wrapper.service.d.ts +0 -58
  448. package/lib/features/wrappers/zac-wrapper.service.d.ts.map +0 -1
  449. package/lib/version.d.ts +0 -4
  450. package/lib/version.d.ts.map +0 -1
@@ -20,7 +20,7 @@ import * as i4 from "@angular/material/dialog";
20
20
  import * as i5 from "@angular/router";
21
21
  import * as i6 from "../../services/settings-service.class";
22
22
  import * as i7 from "../../services/ziti-data.service";
23
- class EdgeRoutersPageService extends ListPageServiceClass {
23
+ export class EdgeRoutersPageService extends ListPageServiceClass {
24
24
  constructor(settings, filterService, zitiService, csvDownloadService, growlerService, dialogForm, extService, router) {
25
25
  super(settings, filterService, csvDownloadService, extService, router);
26
26
  this.zitiService = zitiService;
@@ -64,7 +64,6 @@ class EdgeRoutersPageService extends ListPageServiceClass {
64
64
  ];
65
65
  this.tableHeaderActions = [
66
66
  { name: 'Download All', action: 'download-all' },
67
- { name: 'Download Selected', action: 'download-selected' },
68
67
  ];
69
68
  this.resourceType = 'edge-routers';
70
69
  this.validate = (formData) => {
@@ -337,7 +336,6 @@ class EdgeRoutersPageService extends ListPageServiceClass {
337
336
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EdgeRoutersPageService, deps: [{ token: SETTINGS_SERVICE }, { token: i1.DataTableFilterService }, { token: ZITI_DATA_SERVICE }, { token: i2.CsvDownloadService }, { token: i3.GrowlerService }, { token: i4.MatDialog }, { token: EDGE_ROUTER_EXTENSION_SERVICE }, { token: i5.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
338
337
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EdgeRoutersPageService, providedIn: 'root' }); }
339
338
  }
340
- export { EdgeRoutersPageService };
341
339
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EdgeRoutersPageService, decorators: [{
342
340
  type: Injectable,
343
341
  args: [{
@@ -353,4 +351,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
353
351
  type: Inject,
354
352
  args: [EDGE_ROUTER_EXTENSION_SERVICE]
355
353
  }] }, { type: i5.Router }]; } });
356
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZS1yb3V0ZXJzLXBhZ2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9wYWdlcy9lZGdlLXJvdXRlcnMvZWRnZS1yb3V0ZXJzLXBhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQVksT0FBTyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzFDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUMxRSxPQUFPLEVBQ0gsMkJBQTJCLEVBQzlCLE1BQU0sOEZBQThGLENBQUM7QUFFdEcsT0FBTyxFQUFDLGdCQUFnQixFQUFrQixNQUFNLGlDQUFpQyxDQUFDO0FBQ2xGLE9BQU8sRUFBQyxpQkFBaUIsRUFBa0IsTUFBTSxrQ0FBa0MsQ0FBQztBQUVwRixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDcEQsT0FBTyxFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFHdEMsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0seURBQXlELENBQUM7QUFDM0YsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBSXBFLE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFNLHVFQUF1RSxDQUFDO0FBRXBILE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBRTFFLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDJFQUEyRSxDQUFDOzs7Ozs7Ozs7QUFFakgsTUFHYSxzQkFBdUIsU0FBUSxvQkFBb0I7SUE4QzVELFlBQzhCLFFBQThCLEVBQ3hELGFBQXFDLEVBQ0Ys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LFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQzthQUM5RjtZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxFQUFFO2dCQUNyQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUM7YUFDOUU7WUFDRCxpRUFBaUU7WUFDakU7Ozs7Z0JBSUk7WUFDSixLQUFLLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQzVDO2FBQU07WUFDSCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztTQUM5QztRQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQzlCLENBQUM7K0dBeFZRLHNCQUFzQixrQkErQ25CLGdCQUFnQixtREFFaEIsaUJBQWlCLHNHQUlqQiw2QkFBNkI7bUhBckRoQyxzQkFBc0IsY0FGbkIsTUFBTTs7U0FFVCxzQkFBc0I7NEZBQXRCLHNCQUFzQjtrQkFIbEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQWdEUSxNQUFNOzJCQUFDLGdCQUFnQjs7MEJBRXZCLE1BQU07MkJBQUMsaUJBQWlCOzswQkFJeEIsTUFBTTsyQkFBQyw2QkFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIEluamVjdCwgQ29tcG9uZW50fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtjbG9uZURlZXAsIGlzRW1wdHl9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQge0RhdGFUYWJsZUZpbHRlclNlcnZpY2UsIEZpbHRlck9ian0gZnJvbSBcIi4uLy4uL2ZlYXR1cmVzL2RhdGEtdGFibGUvZGF0YS10YWJsZS1maWx0ZXIuc2VydmljZVwiO1xuaW1wb3J0IHtMaXN0UGFnZVNlcnZpY2VDbGFzc30gZnJvbSBcIi4uLy4uL3NoYXJlZC9saXN0LXBhZ2Utc2VydmljZS5jbGFzc1wiO1xuaW1wb3J0IHtcbiAgICBUYWJsZUNvbHVtbkRlZmF1bHRDb21wb25lbnRcbn0gZnJvbSBcIi4uLy4uL2ZlYXR1cmVzL2RhdGEtdGFibGUvY29sdW1uLWhlYWRlcnMvdGFibGUtY29sdW1uLWRlZmF1bHQvdGFibGUtY29sdW1uLWRlZmF1bHQuY29tcG9uZW50XCI7XG5pbXBvcnQge0NhbGxiYWNrUmVzdWx0c30gZnJvbSBcIi4uLy4uL2ZlYXR1cmVzL2xpc3QtcGFnZS1mZWF0dXJlcy9saXN0LXBhZ2UtZm9ybS9saXN0LXBhZ2UtZm9ybS5jb21wb25lbnRcIjtcbmltcG9ydCB7U0VUVElOR1NfU0VSVklDRSwgU2V0dGluZ3NTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2V0dGluZ3Muc2VydmljZVwiO1xuaW1wb3J0IHtaSVRJX0RBVEFfU0VSVklDRSwgWml0aURhdGFTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMveml0aS1kYXRhLnNlcnZpY2VcIjtcbmltcG9ydCB7Q3N2RG93bmxvYWRTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvY3N2LWRvd25sb2FkLnNlcnZpY2VcIjtcbmltcG9ydCB7RWRnZVJvdXRlcn0gZnJvbSBcIi4uLy4uL21vZGVscy9lZGdlLXJvdXRlclwiO1xuaW1wb3J0IHt1bnNldCwgZm9yRWFjaH0gZnJvbSBcImxvZGFzaFwiO1xuaW1wb3J0IHtJVG9vbHRpcEFuZ3VsYXJDb21wfSBmcm9tIFwiYWctZ3JpZC1hbmd1bGFyXCI7XG5pbXBvcnQge0lUb29sdGlwUGFyYW1zfSBmcm9tIFwiYWctZ3JpZC1jb21tdW5pdHlcIjtcbmltcG9ydCB7T1NUb29sdGlwQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vZmVhdHVyZXMvZGF0YS10YWJsZS90b29sdGlwcy9vcy10b29sdGlwLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtHcm93bGVyTW9kZWx9IGZyb20gXCIuLi8uLi9mZWF0dXJlcy9tZXNzYWdpbmcvZ3Jvd2xlci5tb2RlbFwiO1xuaW1wb3J0IHtHcm93bGVyU2VydmljZX0gZnJvbSBcIi4uLy4uL2ZlYXR1cmVzL21lc3NhZ2luZy9ncm93bGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7TWF0RGlhbG9nfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XG5pbXBvcnQge1NldHRpbmdzU2VydmljZUNsYXNzfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2V0dGluZ3Mtc2VydmljZS5jbGFzc1wiO1xuaW1wb3J0IHtFREdFX1JPVVRFUl9FWFRFTlNJT05fU0VSVklDRX0gZnJvbSBcIi4uLy4uL2ZlYXR1cmVzL3Byb2plY3RhYmxlLWZvcm1zL2VkZ2Utcm91dGVyL2VkZ2Utcm91dGVyLWZvcm0uc2VydmljZVwiO1xuaW1wb3J0IHtFeHRlbnNpb25TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vZmVhdHVyZXMvZXh0ZW5kYWJsZS9leHRlbnNpb25zLW5vb3Auc2VydmljZVwiO1xuaW1wb3J0IHtDb25maXJtQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vZmVhdHVyZXMvY29uZmlybS9jb25maXJtLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7VGFibGVDZWxsTmFtZUNvbXBvbmVudH0gZnJvbSBcIi4uLy4uL2ZlYXR1cmVzL2RhdGEtdGFibGUvY2VsbHMvdGFibGUtY2VsbC1uYW1lL3RhYmxlLWNlbGwtbmFtZS5jb21wb25lbnRcIjtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBFZGdlUm91dGVyc1BhZ2VTZXJ2aWNlIGV4dGVuZHMgTGlzdFBhZ2VTZXJ2aWNlQ2xhc3Mge1xuXG4gICAgcHJpdmF0ZSBwYWdpbmcgPSB0aGlzLkRFRkFVTFRfUEFHSU5HO1xuICAgIHB1YmxpYyBtb2RhbFR5cGUgPSAnZWRnZS1yb3V0ZXInO1xuXG4gICAgb3ZlcnJpZGUgQ1NWX0NPTFVNTlMgPSBbXG4gICAgICAgIHtsYWJlbDogJ05hbWUnLCBwYXRoOiAnbmFtZSd9LFxuICAgICAgICB7bGFiZWw6ICdBdHRyaWJ1dGVzJywgcGF0aDogJ3JvbGVBdHRyaWJ1dGVzJ30sXG4gICAgICAgIHtsYWJlbDogJ1ZlcmlmaWVkJywgcGF0aDogJ2lzVmVyaWZpZWQnfSxcbiAgICAgICAge2xhYmVsOiAnT25saW5lJywgcGF0aDogJ2lzT25saW5lJ30sXG4gICAgICAgIHtsYWJlbDogJ0NyZWF0ZWQnLCBwYXRoOiAnY3JlYXRlZEF0J30sXG4gICAgICAgIHtsYWJlbDogJ1Rva2VuJywgcGF0aDogJ2Vucm9sbG1lbnRUb2tlbid9LFxuICAgICAgICB7bGFiZWw6ICdObyBUcmF2ZXJzYWwnLCBwYXRoOiAnbm9UcmF2ZXJzYWwnfSxcbiAgICAgICAge2xhYmVsOiAnSG9zdCBOYW1lJywgcGF0aDogJ2hvc3RuYW1lJ30sXG4gICAgICAgIHtsYWJlbDogJ0Rpc2FibGVkJywgcGF0aDogJ2Rpc2FibGVkJ30sXG4gICAgICAgIHtsYWJlbDogJ1R1bm5lbGVyIEVuYWJsZWQnLCBwYXRoOiAnaXNUdW5uZWxlckVuYWJsZWQnfSxcbiAgICAgICAge2xhYmVsOiAnT1MnLCBwYXRoOiAndmVyc2lvbkluZm8ub3MnfSxcbiAgICAgICAge2xhYmVsOiAnQXJjaGl0ZWN0dXJlJywgcGF0aDogJ3ZlcnNpb25JbmZvLmFyY2gnfSxcbiAgICAgICAge2xhYmVsOiAnVmVyc2lvbicsIHBhdGg6ICd2ZXJzaW9uSW5mby52ZXJzaW9uJ30sXG4gICAgICAgIHtsYWJlbDogJ1JldmlzaW9uJywgcGF0aDogJ3ZlcnNpb25JbmZvLnJldmlzaW9uJ30sXG4gICAgICAgIHtsYWJlbDogJ0ZpbmdlcnByaW50JywgcGF0aDogJ2ZpbmdlcnByaW50J30sXG4gICAgICAgIHtsYWJlbDogJ0lEJywgcGF0aDogJ2lkJ30sXG4gICAgXTtcblxuICAgIHNlbGVjdGVkRWRnZVJvdXRlcjogYW55ID0gbmV3IEVkZ2VSb3V0ZXIoKTtcbiAgICBjb2x1bW5GaWx0ZXJzOiBhbnkgPSB7XG4gICAgICAgIG5hbWU6ICcnLFxuICAgICAgICBvczogJycsXG4gICAgICAgIGNyZWF0ZWRBdDogJycsXG4gICAgfTtcblxuICAgIG92ZXJyaWRlIG1lbnVJdGVtcyA9IFtcbiAgICAgICAge25hbWU6ICdFZGl0JywgYWN0aW9uOiAndXBkYXRlJ30sXG4gICAgICAgIHtuYW1lOiAnRG93bmxvYWQgSldUJywgYWN0aW9uOiAnZG93bmxvYWQtZW5yb2xsbWVudCd9LFxuICAgICAgICB7bmFtZTogJ1Jlc2V0IEVucm9sbG1lbnQnLCBhY3Rpb246ICdyZXNldC1lbnJvbGxtZW50J30sXG4gICAgICAgIHtuYW1lOiAnUmUtRW5yb2xsJywgYWN0aW9uOiAncmUtZW5yb2xsJ30sXG4gICAgICAgIHtuYW1lOiAnRGVsZXRlJywgYWN0aW9uOiAnZGVsZXRlJ30sXG4gICAgXVxuXG4gICAgb3ZlcnJpZGUgdGFibGVIZWFkZXJBY3Rpb25zID0gW1xuICAgICAgICB7bmFtZTogJ0Rvd25sb2FkIEFsbCcsIGFjdGlvbjogJ2Rvd25sb2FkLWFsbCd9LFxuICAgICAgICB7bmFtZTogJ0Rvd25sb2FkIFNlbGVjdGVkJywgYWN0aW9uOiAnZG93bmxvYWQtc2VsZWN0ZWQnfSxcbiAgICBdXG5cbiAgICByZXNvdXJjZVR5cGUgPSAnZWRnZS1yb3V0ZXJzJztcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KFNFVFRJTkdTX1NFUlZJQ0UpIHNldHRpbmdzOiBTZXR0aW5nc1NlcnZpY2VDbGFzcyxcbiAgICAgICAgZmlsdGVyU2VydmljZTogRGF0YVRhYmxlRmlsdGVyU2VydmljZSxcbiAgICAgICAgQEluamVjdChaSVRJX0RBVEFfU0VSVklDRSkgcHJpdmF0ZSB6aXRpU2VydmljZTogWml0aURhdGFTZXJ2aWNlLFxuICAgICAgICBvdmVycmlkZSBjc3ZEb3dubG9hZFNlcnZpY2U6IENzdkRvd25sb2FkU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBncm93bGVyU2VydmljZTogR3Jvd2xlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZGlhbG9nRm9ybTogTWF0RGlhbG9nLFxuICAgICAgICBASW5qZWN0KEVER0VfUk9VVEVSX0VYVEVOU0lPTl9TRVJWSUNFKSBwcml2YXRlIGV4dFNlcnZpY2U6IEV4dGVuc2lvblNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSByb3V0ZXI6IFJvdXRlclxuICAgICkge1xuICAgICAgICBzdXBlcihzZXR0aW5ncywgZmlsdGVyU2VydmljZSwgY3N2RG93bmxvYWRTZXJ2aWNlLCBleHRTZXJ2aWNlLCByb3V0ZXIpO1xuICAgIH1cblxuICAgIHZhbGlkYXRlID0gKGZvcm1EYXRhKTogUHJvbWlzZTxDYWxsYmFja1Jlc3VsdHM+ID0+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IHBhc3NlZDogdHJ1ZX0pO1xuICAgIH1cblxuICAgIGluaXRUYWJsZUNvbHVtbnMoKTogYW55IHtcbiAgICAgICAgdGhpcy5pbml0TWVudUFjdGlvbnMoKTtcblxuICAgICAgICBjb25zdCBuYW1lUmVuZGVyZXIgPSAocm93KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJjb2wgY2VsbC1uYW1lLXJlbmRlcmVyXCIgZGF0YS1pZD1cIiR7cm93Py5kYXRhPy5pZH1cIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNpcmNsZSAke3Jvdz8uZGF0YT8uaXNWZXJpZmllZH1cIiB0aXRsZT1cIlZlcmlmaWVkIFN0YXR1c1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNpcmNsZSAke3Jvdz8uZGF0YT8uaXNPbmxpbmV9XCIgdGl0bGU9XCJPbmxpbmUgU3RhdHVzXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+JHtyb3c/LmRhdGE/Lm5hbWV9PC9zdHJvbmc+XG4gICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb2xlc1JlbmRlcmVyID0gKHJvdykgPT4ge1xuICAgICAgICAgICAgbGV0IHJvbGVzID0gJyc7XG4gICAgICAgICAgICByb3c/LmRhdGE/LnJvbGVBdHRyaWJ1dGVzPy5mb3JFYWNoKChhdHRyKSA9PiB7XG4gICAgICAgICAgICAgICAgcm9sZXMgKz0gJzxkaXYgY2xhc3M9XCJoYXNodGFnXCI+JythdHRyKyc8L2Rpdj4nO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcm9sZXM7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvc1JlbmRlcmVyID0gKHJvdykgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3NNYXA6IGFueSA9IHtcbiAgICAgICAgICAgICAgICAnZGFyd2luJzogJ2FwcGxlJyxcbiAgICAgICAgICAgICAgICAnbGludXgnOiAnbGludXgnLFxuICAgICAgICAgICAgICAgICdhbmRyb2lkJzogJ2FuZHJvaWQnLFxuICAgICAgICAgICAgICAgICd3aW5kb3dzJzogJ3dpbmRvd3MnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgb3MgPSBcIm90aGVyXCI7XG4gICAgICAgICAgICBmb3JFYWNoKG9zTWFwLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyb3c/LmRhdGE/LnZlcnNpb25JbmZvPy5vc1ZlcnNpb24/LnRvTG93ZXJDYXNlKCkuaW5kZXhPZihrZXkpPj0wIHx8XG4gICAgICAgICAgICAgICAgICAgIHJvdz8uZGF0YT8udmVyc2lvbkluZm8/Lm9zLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihrZXkpPj0wKSB7XG4gICAgICAgICAgICAgICAgICAgIG9zID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJjb2wgZGVza3RvcFwiIGRhdGEtaWQ9XCIke3Jvdz8uZGF0YT8uaWR9XCIgc3R5bGU9XCJvdmVyZmxvdzogdW5zZXQ7XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcyAke29zfVwiIGRhdGEtYmFsbG9vbi1wb3M9XCJ1cFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+YFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZW5yb2xsbWVudFRva2VuRm9ybWF0dGVyID0gKHJvdykgPT4ge1xuICAgICAgICAgICAgY29uc3QgdG9rZW4gPSByb3c/LmRhdGE/LmVucm9sbG1lbnRUb2tlbjtcbiAgICAgICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgICAgIGlmIChtb21lbnQocm93Py5kYXRhPy5lbnJvbGxtZW50RXhwaXJlc0F0KS5pc0JlZm9yZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnRW5yb2xsbWVudCBFeHBpcmVkJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgY29sdW1uRmlsdGVycyA9IHRoaXMuY29sdW1uRmlsdGVycztcblxuICAgICAgICBjb25zdCBvc1BhcmFtcyA9IHtcbiAgICAgICAgICAgIGZpbHRlclR5cGU6ICdDT01CTycsXG4gICAgICAgICAgICBmaWx0ZXJPcHRpb25zOiBbXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ0FsbCcsIHZhbHVlOiAnJywgaWNvbjogJ2VtcHR5JyB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdBcHBsZScsIHZhbHVlOiAnZGFyd2luJywgaWNvbjogJ2FwcGxlJyB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdXaW5kb3dzJywgdmFsdWU6ICdtaW5ndycsIGljb246ICd3aW5kb3dzJyAgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnTGludXgnLCB2YWx1ZTogJ2xpbnV4JywgaWNvbjogJ2xpbnV4JyAgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnQW5kcm9pZCcsIHZhbHVlOiAnYW5kcm9pZCcsIGljb246ICdhbmRyb2lkJyAgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnT3RoZXIgKHRleHQgc2VhcmNoKScsIHZhbHVlOiAnJywgaWNvbjogJ290aGVyJywgdXNlVGV4dElucHV0OiB0cnVlICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGNvbHVtbkZpbHRlcnMsXG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IHRhYmxlQ29sdW1ucyA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb2xJZDogJ25hbWUnLFxuICAgICAgICAgICAgICAgIGZpZWxkOiAnbmFtZScsXG4gICAgICAgICAgICAgICAgaGVhZGVyTmFtZTogJ05hbWUnLFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbXBvbmVudDogVGFibGVDb2x1bW5EZWZhdWx0Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbXBvbmVudFBhcmFtczogdGhpcy5oZWFkZXJDb21wb25lbnRQYXJhbXMsXG4gICAgICAgICAgICAgICAgY2VsbFJlbmRlcmVyOiBUYWJsZUNlbGxOYW1lQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgIGNlbGxSZW5kZXJlclBhcmFtczogeyBwYXRoUm9vdDogdGhpcy5iYXNlUGF0aCwgc2hvd1JvdXRlckljb25zOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgb25DZWxsQ2xpY2tlZDogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzU2VsZWN0ZWRUZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5FZGl0Rm9ybShkYXRhPy5kYXRhPy5pZCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZXNpemFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgY2VsbENsYXNzOiAnbmYtY2VsbC12ZXJ0LWFsaWduIHRDb2wnLFxuICAgICAgICAgICAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGZpbHRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzb3J0Q29sdW1uOiB0aGlzLnNvcnQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICBzb3J0RGlyOiAnYXNjJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb2xJZDogJ29zJyxcbiAgICAgICAgICAgICAgICBmaWVsZDogJ3ZlcnNpb25JbmZvLm9zJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJOYW1lOiAnTy9TJyxcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwLFxuICAgICAgICAgICAgICAgIGNlbGxSZW5kZXJlcjogb3NSZW5kZXJlcixcbiAgICAgICAgICAgICAgICBoZWFkZXJDb21wb25lbnQ6IFRhYmxlQ29sdW1uRGVmYXVsdENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICB0b29sdGlwQ29tcG9uZW50OiBPU1Rvb2x0aXBDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgdG9vbHRpcEZpZWxkOiAndmVyc2lvbkluZm8ub3MnLFxuICAgICAgICAgICAgICAgIHRvb2x0aXBDb21wb25lbnRQYXJhbXM6IHsgY29sb3I6ICcjZWNlY2VjJyB9LFxuICAgICAgICAgICAgICAgIHJlc2l6YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjZWxsQ2xhc3M6ICduZi1jZWxsLXZlcnQtYWxpZ24gdENvbCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbElkOiAncm9sZUF0dHJpYnV0ZXMnLFxuICAgICAgICAgICAgICAgIGZpZWxkOiAncm9sZUF0dHJpYnV0ZXMnLFxuICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6ICdSb2xlcycsXG4gICAgICAgICAgICAgICAgaGVhZGVyQ29tcG9uZW50OiBUYWJsZUNvbHVtbkRlZmF1bHRDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgb25DZWxsQ2xpY2tlZDogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzU2VsZWN0ZWRUZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5FZGl0Rm9ybShkYXRhPy5kYXRhPy5pZCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZXNpemFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgY2VsbFJlbmRlcmVyOiB0aGlzLnJvbGVzUmVuZGVyZXIsXG4gICAgICAgICAgICAgICAgY2VsbENsYXNzOiAnbmYtY2VsbC12ZXJ0LWFsaWduIHRDb2wnLFxuICAgICAgICAgICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBmaWx0ZXI6IGZhbHNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb2xJZDogJ3ZlcmlmaWVkJyxcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2lzVmVyaWZpZWQnLFxuICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6ICdWZXJpZmllZCcsXG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCxcbiAgICAgICAgICAgICAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoZWFkZXJDb21wb25lbnQ6IFRhYmxlQ29sdW1uRGVmYXVsdENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICByZXNpemFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgY2VsbENsYXNzOiAnbmYtY2VsbC12ZXJ0LWFsaWduIHRDb2wnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb2xJZDogJ29ubGluZScsXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdpc09ubGluZScsXG4gICAgICAgICAgICAgICAgaGVhZGVyTmFtZTogJ09ubGluZScsXG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCxcbiAgICAgICAgICAgICAgICBoZWFkZXJDb21wb25lbnQ6IFRhYmxlQ29sdW1uRGVmYXVsdENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICByZXNpemFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgY2VsbENsYXNzOiAnbmYtY2VsbC12ZXJ0LWFsaWduIHRDb2wnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb2xJZDogJ2NyZWF0ZWRBdCcsXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdjcmVhdGVkQXQnLFxuICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6ICdDcmVhdGVkIEF0JyxcbiAgICAgICAgICAgICAgICBoZWFkZXJDb21wb25lbnQ6IFRhYmxlQ29sdW1uRGVmYXVsdENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICB2YWx1ZUZvcm1hdHRlcjogdGhpcy5jcmVhdGVkQXRGb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgcmVzaXphYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNvcnRDb2x1bW46IHRoaXMuc29ydC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgIGNlbGxDbGFzczogJ25mLWNlbGwtdmVydC1hbGlnbiB0Q29sJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29sSWQ6ICdlbnJvbGxtZW50VG9rZW4nLFxuICAgICAgICAgICAgICAgIGZpZWxkOiAnZW5yb2xsbWVudFRva2VuJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJOYW1lOiAnVG9rZW4nLFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbXBvbmVudDogVGFibGVDb2x1bW5EZWZhdWx0Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgIHZhbHVlRm9ybWF0dGVyOiBlbnJvbGxtZW50VG9rZW5Gb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgcmVzaXphYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNlbGxDbGFzczogJ25mLWNlbGwtdmVydC1hbGlnbiB0Q29sJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29sSWQ6ICdqd3QnLFxuICAgICAgICAgICAgICAgIGZpZWxkOiAnZW5yb2xsbWVudEp3dCcsXG4gICAgICAgICAgICAgICAgaGVhZGVyTmFtZTogJ0pXVCcsXG4gICAgICAgICAgICAgICAgaGVhZGVyQ29tcG9uZW50OiBUYWJsZUNvbHVtbkRlZmF1bHRDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgY2VsbFJlbmRlcmVyOiAnY2VsbFRva2VuQ29tcG9uZW50JyxcbiAgICAgICAgICAgICAgICByZXNpemFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgY2VsbENsYXNzOiAnbmYtY2VsbC12ZXJ0LWFsaWduIHRDb2wnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMuSURfQ09MVU1OX0RFRlxuICAgICAgICBdO1xuXG4gICAgICAgIGlmICh0aGlzLmV4dFNlcnZpY2UucHJvY2Vzc1RhYmxlQ29sdW1ucykge1xuICAgICAgICAgICAgdGFibGVDb2x1bW5zID0gdGhpcy5leHRTZXJ2aWNlLnByb2Nlc3NUYWJsZUNvbHVtbnModGFibGVDb2x1bW5zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0YWJsZUNvbHVtbnM7XG4gICAgfVxuXG4gICAgZ2V0RGF0YShmaWx0ZXJzPzogRmlsdGVyT2JqW10sIHNvcnQ/OiBhbnksIHBhZ2U/OiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICAvLyB3ZSBjYW4gY3VzdG9taXplIGZpbHRlcnMgb3Igc29ydGluZyBoZXJlIGJlZm9yZSBtb3Zpbmcgb24uLi5cbiAgICAgICAgdGhpcy5wYWdpbmcucGFnZSA9IHBhZ2UgfHwgdGhpcy5wYWdpbmcucGFnZTtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldFRhYmxlRGF0YSgnZWRnZS1yb3V0ZXJzJywgdGhpcy5wYWdpbmcsIGZpbHRlcnMsIHNvcnQpXG4gICAgICAgICAgICAudGhlbigocmVzdWx0czogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RhdGEocmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NEYXRhKHJlc3VsdHM6IGFueSkge1xuICAgICAgICBpZiAoIWlzRW1wdHkocmVzdWx0cz8uZGF0YSkpIHtcbiAgICAgICAgICAgIC8vcHJlLXByb2Nlc3MgZGF0YSBiZWZvcmUgcmVuZGVyaW5nXG4gICAgICAgICAgICByZXN1bHRzLmRhdGEgPSB0aGlzLmFkZEFjdGlvbnNQZXJSb3cocmVzdWx0cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRBY3Rpb25zUGVyUm93KHJlc3VsdHM6IGFueSk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHMuZGF0YS5tYXAoKHJvdykgPT4ge1xuICAgICAgICAgICAgcm93LmFjdGlvbkxpc3QgPSBbJ3VwZGF0ZScsICdyZS1lbnJvbGwnLCAnZGVsZXRlJ107XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNFbnJvbG1lbnRUb2tlbihyb3cpKSB7XG4gICAgICAgICAgICAgICAgcm93LmFjdGlvbkxpc3QucHVzaCgnZG93bmxvYWQtZW5yb2xsbWVudCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hZGRMaXN0SXRlbUV4dGVuc2lvbkFjdGlvbnMocm93KTtcbiAgICAgICAgICAgIHJldHVybiByb3c7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGhhc0Vucm9sbWVudFRva2VuKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuICFpc0VtcHR5KGl0ZW0/LmVucm9sbG1lbnRKd3QpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRFZGdlUm91dGVyUm9sZUF0dHJpYnV0ZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnppdGlTZXJ2aWNlLmdldCgnZWRnZS1yb3V0ZXItcm9sZS1hdHRyaWJ1dGVzJywge30sIFtdKTtcbiAgICB9XG5cblxuICAgIGdldEpXVChpZGVudGl0eTogYW55KSB7XG4gICAgICAgIHJldHVybiBpZGVudGl0eS5lbnJvbGxtZW50Snd0O1xuICAgIH1cblxuICAgIGRvd25sb2FkSldUKGp3dCwgbmFtZSkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnaHJlZicsICdkYXRhOmFwcGxpY2F0aW9uL3ppdGktand0O2NoYXJzZXQ9dXRmLTgsJyArIGVuY29kZVVSSUNvbXBvbmVudChqd3QpKTtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgbmFtZStcIi5qd3RcIik7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbGVtZW50KTtcbiAgICAgICAgZWxlbWVudC5jbGljaygpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIHJlZW5yb2xsKHJvdXRlcjogYW55KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICBhcHBlbmRJZDogJ1JlZW5yb2xsUm91dGVyJyxcbiAgICAgICAgICAgIHRpdGxlOiAnUmUtRW5yb2xsIFJvdXRlcicsXG4gICAgICAgICAgICBtZXNzYWdlOiBgPHA+SWYgdGhlIHJvdXRlciBpcyBjdXJyZW50bHkgY29ubmVjdGVkLCBpdCB3aWxsIGJlIGRpc2Nvbm5lY3RlZCB1bnRpbCB0aGUgZW5yb2xsbWVudCBwcm9jZXNzIGlzIGNvbXBsZXRlZCB3aXRoIHRoZSBuZXdseSBnZW5lcmF0ZWQgSldULiA8cD4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlLWVucm9sbCB0aGUgc2VsZWN0ZWQgcm91dGVyP2AsXG4gICAgICAgICAgICBjb25maXJtTGFiZWw6ICdZZXMnLFxuICAgICAgICAgICAgY2FuY2VsTGFiZWw6ICdPb3BzLCBubyBnZXQgbWUgb3V0IG9mIGhlcmUnLFxuICAgICAgICAgICAgc2hvd0NhbmNlbExpbms6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ0Zvcm0ub3BlbihDb25maXJtQ29tcG9uZW50LCB7XG4gICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3VsdD8uY29uZmlybWVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMueml0aVNlcnZpY2UucG9zdChgZWRnZS1yb3V0ZXJzLyR7cm91dGVyLmlkfS9yZS1lbnJvbGxgLCB7fSwgdHJ1ZSkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgICAgICAgICAgICAgICAgICdzdWNjZXNzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdTdWNjZXNzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGBSZS1lbnJvbGwgQ29uZmlybWVkYCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGBSb3V0ZXIgcmUtZW5yb2xsIHdhcyBzZW50LiBBIG5ldyBlbnJvbGxtZW50IHRva2VuIGlzIG5vdyBhdmFpbGFibGVgLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3dsZXJTZXJ2aWNlLnNob3coZ3Jvd2xlckRhdGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvcGVuVXBkYXRlKGl0ZW0/OiBhbnkpIHtcbiAgICAgICAgdGhpcy5tb2RhbFR5cGUgPSAnZWRnZS1yb3V0ZXInO1xuICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEVkZ2VSb3V0ZXIgPSBpdGVtO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEVkZ2VSb3V0ZXIuYmFkZ2VzID0gW107XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEVkZ2VSb3V0ZXIuaXNPbmxpbmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRWRnZVJvdXRlci5iYWRnZXMucHVzaCh7bGFiZWw6ICdPbmxpbmUnLCBjbGFzczogJ29ubGluZScsIGNpcmNsZTogJ3RydWUnfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRFZGdlUm91dGVyLmJhZGdlcy5wdXNoKHtsYWJlbDogJ09mZmxpbmUnLCBjbGFzczogJ29mZmxpbmUnLCBjaXJjbGU6ICdmYWxzZSd9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEVkZ2VSb3V0ZXIuaXNWZXJpZmllZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRFZGdlUm91dGVyLmJhZGdlcy5wdXNoKHtsYWJlbDogJ1VudmVyaWZpZWQnLCBjbGFzczogJ3VucmVnJ30pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVE9ETzogaW1wbGVtZW50IHdoZW4gbWV0cmljcyBhbmQgZGlhbG9nIGZlYXR1cmVzIGFyZSBhdmFpbGFibGVcbiAgICAgICAgICAgIC8qdGhpcy5zZWxlY3RlZEVkZ2VSb3V0ZXJaLm1vcmVBY3Rpb25zID0gW1xuICAgICAgICAgICAgICAgIHtuYW1lOiAnb3Blbi1tZXRyaWNzJywgbGFiZWw6ICdPcGVuIE1ldHJpY3MnfSxcbiAgICAgICAgICAgICAgICB7bmFtZTogJ2RpYWwtbG9ncycsIGxhYmVsOiAnRGlhbCBMb2dzJ30sXG4gICAgICAgICAgICAgICAge25hbWU6ICdkaWFsLWxvZ3MnLCBsYWJlbDogJ1ZpZXcgRXZlbnRzJ30sXG4gICAgICAgICAgICBdOyovXG4gICAgICAgICAgICB1bnNldCh0aGlzLnNlbGVjdGVkRWRnZVJvdXRlciwgJ19saW5rcycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEVkZ2VSb3V0ZXIgPSBuZXcgRWRnZVJvdXRlcigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2lkZU1vZGFsT3BlbiA9IHRydWU7XG4gICAgfVxufVxuIl19
354
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZS1yb3V0ZXJzLXBhZ2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9wYWdlcy9lZGdlLXJvdXRlcnMvZWRnZS1yb3V0ZXJzLXBhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQVksT0FBTyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzFDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUMxRSxPQUFPLEVBQ0gsMkJBQTJCLEVBQzlCLE1BQU0sOEZBQThGLENBQUM7QUFFdEcsT0FBTyxFQUFDLGdCQUFnQixFQUFrQixNQUFNLGlDQUFpQyxDQUFDO0FBQ2xGLE9BQU8sRUFBQyxpQkFBaUIsRUFBa0IsTUFBTSxrQ0FBa0MsQ0FBQztBQUVwRixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDcEQsT0FBTyxFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFHdEMsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0seURBQXlELENBQUM7QUFDM0YsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBSXBFLE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFNLHVFQUF1RSxDQUFDO0FBRXBILE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBRTFFLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDJFQUEyRSxDQUFDOzs7Ozs7Ozs7QUFLakgsTUFBTSxPQUFPLHNCQUF1QixTQUFRLG9CQUFvQjtJQTZDNUQsWUFDOEIsUUFBOEIsRUFDeEQsYUFBcUMs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RCxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRTtnQkFDckMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO2FBQzlFO1lBQ0QsaUVBQWlFO1lBQ2pFOzs7O2dCQUlJO1lBQ0osS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUM1QzthQUFNO1lBQ0gsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7U0FDOUM7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztJQUM5QixDQUFDOytHQXZWUSxzQkFBc0Isa0JBOENuQixnQkFBZ0IsbURBRWhCLGlCQUFpQixzR0FJakIsNkJBQTZCO21IQXBEaEMsc0JBQXNCLGNBRm5CLE1BQU07OzRGQUVULHNCQUFzQjtrQkFIbEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQStDUSxNQUFNOzJCQUFDLGdCQUFnQjs7MEJBRXZCLE1BQU07MkJBQUMsaUJBQWlCOzswQkFJeEIsTUFBTTsyQkFBQyw2QkFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIEluamVjdCwgQ29tcG9uZW50fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtjbG9uZURlZXAsIGlzRW1wdHl9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQge0RhdGFUYWJsZUZpbHRlclNlcnZpY2UsIEZpbHRlck9ian0gZnJvbSBcIi4uLy4uL2ZlYXR1cmVzL2RhdGEtdGFibGUvZGF0YS10YWJsZS1maWx0ZXIuc2VydmljZVwiO1xuaW1wb3J0IHtMaXN0UGFnZVNlcnZpY2VDbGFzc30gZnJvbSBcIi4uLy4uL3NoYXJlZC9saXN0LXBhZ2Utc2VydmljZS5jbGFzc1wiO1xuaW1wb3J0IHtcbiAgICBUYWJsZUNvbHVtbkRlZmF1bHRDb21wb25lbnRcbn0gZnJvbSBcIi4uLy4uL2ZlYXR1cmVzL2RhdGEtdGFibGUvY29sdW1uLWhlYWRlcnMvdGFibGUtY29sdW1uLWRlZmF1bHQvdGFibGUtY29sdW1uLWRlZmF1bHQuY29tcG9uZW50XCI7XG5pbXBvcnQge0NhbGxiYWNrUmVzdWx0c30gZnJvbSBcIi4uLy4uL2ZlYXR1cmVzL2xpc3QtcGFnZS1mZWF0dXJlcy9saXN0LXBhZ2UtZm9ybS9saXN0LXBhZ2UtZm9ybS5jb21wb25lbnRcIjtcbmltcG9ydCB7U0VUVElOR1NfU0VSVklDRSwgU2V0dGluZ3NTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2V0dGluZ3Muc2VydmljZVwiO1xuaW1wb3J0IHtaSVRJX0RBVEFfU0VSVklDRSwgWml0aURhdGFTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMveml0aS1kYXRhLnNlcnZpY2VcIjtcbmltcG9ydCB7Q3N2RG93bmxvYWRTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvY3N2LWRvd25sb2FkLnNlcnZpY2VcIjtcbmltcG9ydCB7RWRnZVJvdXRlcn0gZnJvbSBcIi4uLy4uL21vZGVscy9lZGdlLXJvdXRlclwiO1xuaW1wb3J0IHt1bnNldCwgZm9yRWFjaH0gZnJvbSBcImxvZGFzaFwiO1xuaW1wb3J0IHtJVG9vbHRpcEFuZ3VsYXJDb21wfSBmcm9tIFwiYWctZ3JpZC1hbmd1bGFyXCI7XG5pbXBvcnQge0lUb29sdGlwUGFyYW1zfSBmcm9tIFwiYWctZ3JpZC1jb21tdW5pdHlcIjtcbmltcG9ydCB7T1NUb29sdGlwQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vZmVhdHVyZXMvZGF0YS10YWJsZS90b29sdGlwcy9vcy10b29sdGlwLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtHcm93bGVyTW9kZWx9IGZyb20gXCIuLi8uLi9mZWF0dXJlcy9tZXNzYWdpbmcvZ3Jvd2xlci5tb2RlbFwiO1xuaW1wb3J0IHtHcm93bGVyU2VydmljZX0gZnJvbSBcIi4uLy4uL2ZlYXR1cmVzL21lc3NhZ2luZy9ncm93bGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7TWF0RGlhbG9nfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XG5pbXBvcnQge1NldHRpbmdzU2VydmljZUNsYXNzfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2V0dGluZ3Mtc2VydmljZS5jbGFzc1wiO1xuaW1wb3J0IHtFREdFX1JPVVRFUl9FWFRFTlNJT05fU0VSVklDRX0gZnJvbSBcIi4uLy4uL2ZlYXR1cmVzL3Byb2plY3RhYmxlLWZvcm1zL2VkZ2Utcm91dGVyL2VkZ2Utcm91dGVyLWZvcm0uc2VydmljZVwiO1xuaW1wb3J0IHtFeHRlbnNpb25TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vZmVhdHVyZXMvZXh0ZW5kYWJsZS9leHRlbnNpb25zLW5vb3Auc2VydmljZVwiO1xuaW1wb3J0IHtDb25maXJtQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vZmVhdHVyZXMvY29uZmlybS9jb25maXJtLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7VGFibGVDZWxsTmFtZUNvbXBvbmVudH0gZnJvbSBcIi4uLy4uL2ZlYXR1cmVzL2RhdGEtdGFibGUvY2VsbHMvdGFibGUtY2VsbC1uYW1lL3RhYmxlLWNlbGwtbmFtZS5jb21wb25lbnRcIjtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBFZGdlUm91dGVyc1BhZ2VTZXJ2aWNlIGV4dGVuZHMgTGlzdFBhZ2VTZXJ2aWNlQ2xhc3Mge1xuXG4gICAgcHJpdmF0ZSBwYWdpbmcgPSB0aGlzLkRFRkFVTFRfUEFHSU5HO1xuICAgIHB1YmxpYyBtb2RhbFR5cGUgPSAnZWRnZS1yb3V0ZXInO1xuXG4gICAgb3ZlcnJpZGUgQ1NWX0NPTFVNTlMgPSBbXG4gICAgICAgIHtsYWJlbDogJ05hbWUnLCBwYXRoOiAnbmFtZSd9LFxuICAgICAgICB7bGFiZWw6ICdBdHRyaWJ1dGVzJywgcGF0aDogJ3JvbGVBdHRyaWJ1dGVzJ30sXG4gICAgICAgIHtsYWJlbDogJ1ZlcmlmaWVkJywgcGF0aDogJ2lzVmVyaWZpZWQnfSxcbiAgICAgICAge2xhYmVsOiAnT25saW5lJywgcGF0aDogJ2lzT25saW5lJ30sXG4gICAgICAgIHtsYWJlbDogJ0NyZWF0ZWQnLCBwYXRoOiAnY3JlYXRlZEF0J30sXG4gICAgICAgIHtsYWJlbDogJ1Rva2VuJywgcGF0aDogJ2Vucm9sbG1lbnRUb2tlbid9LFxuICAgICAgICB7bGFiZWw6ICdObyBUcmF2ZXJzYWwnLCBwYXRoOiAnbm9UcmF2ZXJzYWwnfSxcbiAgICAgICAge2xhYmVsOiAnSG9zdCBOYW1lJywgcGF0aDogJ2hvc3RuYW1lJ30sXG4gICAgICAgIHtsYWJlbDogJ0Rpc2FibGVkJywgcGF0aDogJ2Rpc2FibGVkJ30sXG4gICAgICAgIHtsYWJlbDogJ1R1bm5lbGVyIEVuYWJsZWQnLCBwYXRoOiAnaXNUdW5uZWxlckVuYWJsZWQnfSxcbiAgICAgICAge2xhYmVsOiAnT1MnLCBwYXRoOiAndmVyc2lvbkluZm8ub3MnfSxcbiAgICAgICAge2xhYmVsOiAnQXJjaGl0ZWN0dXJlJywgcGF0aDogJ3ZlcnNpb25JbmZvLmFyY2gnfSxcbiAgICAgICAge2xhYmVsOiAnVmVyc2lvbicsIHBhdGg6ICd2ZXJzaW9uSW5mby52ZXJzaW9uJ30sXG4gICAgICAgIHtsYWJlbDogJ1JldmlzaW9uJywgcGF0aDogJ3ZlcnNpb25JbmZvLnJldmlzaW9uJ30sXG4gICAgICAgIHtsYWJlbDogJ0ZpbmdlcnByaW50JywgcGF0aDogJ2ZpbmdlcnByaW50J30sXG4gICAgICAgIHtsYWJlbDogJ0lEJywgcGF0aDogJ2lkJ30sXG4gICAgXTtcblxuICAgIHNlbGVjdGVkRWRnZVJvdXRlcjogYW55ID0gbmV3IEVkZ2VSb3V0ZXIoKTtcbiAgICBjb2x1bW5GaWx0ZXJzOiBhbnkgPSB7XG4gICAgICAgIG5hbWU6ICcnLFxuICAgICAgICBvczogJycsXG4gICAgICAgIGNyZWF0ZWRBdDogJycsXG4gICAgfTtcblxuICAgIG92ZXJyaWRlIG1lbnVJdGVtcyA9IFtcbiAgICAgICAge25hbWU6ICdFZGl0JywgYWN0aW9uOiAndXBkYXRlJ30sXG4gICAgICAgIHtuYW1lOiAnRG93bmxvYWQgSldUJywgYWN0aW9uOiAnZG93bmxvYWQtZW5yb2xsbWVudCd9LFxuICAgICAgICB7bmFtZTogJ1Jlc2V0IEVucm9sbG1lbnQnLCBhY3Rpb246ICdyZXNldC1lbnJvbGxtZW50J30sXG4gICAgICAgIHtuYW1lOiAnUmUtRW5yb2xsJywgYWN0aW9uOiAncmUtZW5yb2xsJ30sXG4gICAgICAgIHtuYW1lOiAnRGVsZXRlJywgYWN0aW9uOiAnZGVsZXRlJ30sXG4gICAgXVxuXG4gICAgb3ZlcnJpZGUgdGFibGVIZWFkZXJBY3Rpb25zID0gW1xuICAgICAgICB7bmFtZTogJ0Rvd25sb2FkIEFsbCcsIGFjdGlvbjogJ2Rvd25sb2FkLWFsbCd9LFxuICAgIF1cblxuICAgIHJlc291cmNlVHlwZSA9ICdlZGdlLXJvdXRlcnMnO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoU0VUVElOR1NfU0VSVklDRSkgc2V0dGluZ3M6IFNldHRpbmdzU2VydmljZUNsYXNzLFxuICAgICAgICBmaWx0ZXJTZXJ2aWNlOiBEYXRhVGFibGVGaWx0ZXJTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KFpJVElfREFUQV9TRVJWSUNFKSBwcml2YXRlIHppdGlTZXJ2aWNlOiBaaXRpRGF0YVNlcnZpY2UsXG4gICAgICAgIG92ZXJyaWRlIGNzdkRvd25sb2FkU2VydmljZTogQ3N2RG93bmxvYWRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGdyb3dsZXJTZXJ2aWNlOiBHcm93bGVyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2dGb3JtOiBNYXREaWFsb2csXG4gICAgICAgIEBJbmplY3QoRURHRV9ST1VURVJfRVhURU5TSU9OX1NFUlZJQ0UpIHByaXZhdGUgZXh0U2VydmljZTogRXh0ZW5zaW9uU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIHJvdXRlcjogUm91dGVyXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKHNldHRpbmdzLCBmaWx0ZXJTZXJ2aWNlLCBjc3ZEb3dubG9hZFNlcnZpY2UsIGV4dFNlcnZpY2UsIHJvdXRlcik7XG4gICAgfVxuXG4gICAgdmFsaWRhdGUgPSAoZm9ybURhdGEpOiBQcm9taXNlPENhbGxiYWNrUmVzdWx0cz4gPT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgcGFzc2VkOiB0cnVlfSk7XG4gICAgfVxuXG4gICAgaW5pdFRhYmxlQ29sdW1ucygpOiBhbnkge1xuICAgICAgICB0aGlzLmluaXRNZW51QWN0aW9ucygpO1xuXG4gICAgICAgIGNvbnN0IG5hbWVSZW5kZXJlciA9IChyb3cpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz1cImNvbCBjZWxsLW5hbWUtcmVuZGVyZXJcIiBkYXRhLWlkPVwiJHtyb3c/LmRhdGE/LmlkfVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2lyY2xlICR7cm93Py5kYXRhPy5pc1ZlcmlmaWVkfVwiIHRpdGxlPVwiVmVyaWZpZWQgU3RhdHVzXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2lyY2xlICR7cm93Py5kYXRhPy5pc09ubGluZX1cIiB0aXRsZT1cIk9ubGluZSBTdGF0dXNcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz4ke3Jvdz8uZGF0YT8ubmFtZX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJvbGVzUmVuZGVyZXIgPSAocm93KSA9PiB7XG4gICAgICAgICAgICBsZXQgcm9sZXMgPSAnJztcbiAgICAgICAgICAgIHJvdz8uZGF0YT8ucm9sZUF0dHJpYnV0ZXM/LmZvckVhY2goKGF0dHIpID0+IHtcbiAgICAgICAgICAgICAgICByb2xlcyArPSAnPGRpdiBjbGFzcz1cImhhc2h0YWdcIj4nK2F0dHIrJzwvZGl2Pic7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByb2xlcztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9zUmVuZGVyZXIgPSAocm93KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvc01hcDogYW55ID0ge1xuICAgICAgICAgICAgICAgICdkYXJ3aW4nOiAnYXBwbGUnLFxuICAgICAgICAgICAgICAgICdsaW51eCc6ICdsaW51eCcsXG4gICAgICAgICAgICAgICAgJ2FuZHJvaWQnOiAnYW5kcm9pZCcsXG4gICAgICAgICAgICAgICAgJ3dpbmRvd3MnOiAnd2luZG93cydcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBvcyA9IFwib3RoZXJcIjtcbiAgICAgICAgICAgIGZvckVhY2gob3NNYXAsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJvdz8uZGF0YT8udmVyc2lvbkluZm8/Lm9zVmVyc2lvbj8udG9Mb3dlckNhc2UoKS5pbmRleE9mKGtleSk+PTAgfHxcbiAgICAgICAgICAgICAgICAgICAgcm93Py5kYXRhPy52ZXJzaW9uSW5mbz8ub3MudG9Mb3dlckNhc2UoKS5pbmRleE9mKGtleSk+PTApIHtcbiAgICAgICAgICAgICAgICAgICAgb3MgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz1cImNvbCBkZXNrdG9wXCIgZGF0YS1pZD1cIiR7cm93Py5kYXRhPy5pZH1cIiBzdHlsZT1cIm92ZXJmbG93OiB1bnNldDtcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9zICR7b3N9XCIgZGF0YS1iYWxsb29uLXBvcz1cInVwXCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5gXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbnJvbGxtZW50VG9rZW5Gb3JtYXR0ZXIgPSAocm93KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0b2tlbiA9IHJvdz8uZGF0YT8uZW5yb2xsbWVudFRva2VuO1xuICAgICAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1vbWVudChyb3c/LmRhdGE/LmVucm9sbG1lbnRFeHBpcmVzQXQpLmlzQmVmb3JlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdFbnJvbGxtZW50IEV4cGlyZWQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBjb2x1bW5GaWx0ZXJzID0gdGhpcy5jb2x1bW5GaWx0ZXJzO1xuXG4gICAgICAgIGNvbnN0IG9zUGFyYW1zID0ge1xuICAgICAgICAgICAgZmlsdGVyVHlwZTogJ0NPTUJPJyxcbiAgICAgICAgICAgIGZpbHRlck9wdGlvbnM6IFtcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnQWxsJywgdmFsdWU6ICcnLCBpY29uOiAnZW1wdHknIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ0FwcGxlJywgdmFsdWU6ICdkYXJ3aW4nLCBpY29uOiAnYXBwbGUnIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ1dpbmRvd3MnLCB2YWx1ZTogJ21pbmd3JywgaWNvbjogJ3dpbmRvd3MnICB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdMaW51eCcsIHZhbHVlOiAnbGludXgnLCBpY29uOiAnbGludXgnICB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdBbmRyb2lkJywgdmFsdWU6ICdhbmRyb2lkJywgaWNvbjogJ2FuZHJvaWQnICB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdPdGhlciAodGV4dCBzZWFyY2gpJywgdmFsdWU6ICcnLCBpY29uOiAnb3RoZXInLCB1c2VUZXh0SW5wdXQ6IHRydWUgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgY29sdW1uRmlsdGVycyxcbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgdGFibGVDb2x1bW5zID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbElkOiAnbmFtZScsXG4gICAgICAgICAgICAgICAgZmllbGQ6ICduYW1lJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJOYW1lOiAnTmFtZScsXG4gICAgICAgICAgICAgICAgaGVhZGVyQ29tcG9uZW50OiBUYWJsZUNvbHVtbkRlZmF1bHRDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgaGVhZGVyQ29tcG9uZW50UGFyYW1zOiB0aGlzLmhlYWRlckNvbXBvbmVudFBhcmFtcyxcbiAgICAgICAgICAgICAgICBjZWxsUmVuZGVyZXI6IFRhYmxlQ2VsbE5hbWVDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgY2VsbFJlbmRlcmVyUGFyYW1zOiB7IHBhdGhSb290OiB0aGlzLmJhc2VQYXRoLCBzaG93Um91dGVySWNvbnM6IHRydWUgfSxcbiAgICAgICAgICAgICAgICBvbkNlbGxDbGlja2VkOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNTZWxlY3RlZFRleHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbkVkaXRGb3JtKGRhdGE/LmRhdGE/LmlkKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlc2l6YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjZWxsQ2xhc3M6ICduZi1jZWxsLXZlcnQtYWxpZ24gdENvbCcsXG4gICAgICAgICAgICAgICAgc29ydGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgZmlsdGVyOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNvcnRDb2x1bW46IHRoaXMuc29ydC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgIHNvcnREaXI6ICdhc2MnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbElkOiAnb3MnLFxuICAgICAgICAgICAgICAgIGZpZWxkOiAndmVyc2lvbkluZm8ub3MnLFxuICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6ICdPL1MnLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAsXG4gICAgICAgICAgICAgICAgY2VsbFJlbmRlcmVyOiBvc1JlbmRlcmVyLFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbXBvbmVudDogVGFibGVDb2x1bW5EZWZhdWx0Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgIHRvb2x0aXBDb21wb25lbnQ6IE9TVG9vbHRpcENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICB0b29sdGlwRmllbGQ6ICd2ZXJzaW9uSW5mby5vcycsXG4gICAgICAgICAgICAgICAgdG9vbHRpcENvbXBvbmVudFBhcmFtczogeyBjb2xvcjogJyNlY2VjZWMnIH0sXG4gICAgICAgICAgICAgICAgcmVzaXphYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNlbGxDbGFzczogJ25mLWNlbGwtdmVydC1hbGlnbiB0Q29sJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29sSWQ6ICdyb2xlQXR0cmlidXRlcycsXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdyb2xlQXR0cmlidXRlcycsXG4gICAgICAgICAgICAgICAgaGVhZGVyTmFtZTogJ1JvbGVzJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJDb21wb25lbnQ6IFRhYmxlQ29sdW1uRGVmYXVsdENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICBvbkNlbGxDbGlja2VkOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNTZWxlY3RlZFRleHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbkVkaXRGb3JtKGRhdGE/LmRhdGE/LmlkKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlc2l6YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjZWxsUmVuZGVyZXI6IHRoaXMucm9sZXNSZW5kZXJlcixcbiAgICAgICAgICAgICAgICBjZWxsQ2xhc3M6ICduZi1jZWxsLXZlcnQtYWxpZ24gdENvbCcsXG4gICAgICAgICAgICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGZpbHRlcjogZmFsc2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbElkOiAndmVyaWZpZWQnLFxuICAgICAgICAgICAgICAgIGZpZWxkOiAnaXNWZXJpZmllZCcsXG4gICAgICAgICAgICAgICAgaGVhZGVyTmFtZTogJ1ZlcmlmaWVkJyxcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwLFxuICAgICAgICAgICAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbXBvbmVudDogVGFibGVDb2x1bW5EZWZhdWx0Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgIHJlc2l6YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjZWxsQ2xhc3M6ICduZi1jZWxsLXZlcnQtYWxpZ24gdENvbCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbElkOiAnb25saW5lJyxcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2lzT25saW5lJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJOYW1lOiAnT25saW5lJyxcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwLFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbXBvbmVudDogVGFibGVDb2x1bW5EZWZhdWx0Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgIHJlc2l6YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjZWxsQ2xhc3M6ICduZi1jZWxsLXZlcnQtYWxpZ24gdENvbCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbElkOiAnY3JlYXRlZEF0JyxcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2NyZWF0ZWRBdCcsXG4gICAgICAgICAgICAgICAgaGVhZGVyTmFtZTogJ0NyZWF0ZWQgQXQnLFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbXBvbmVudDogVGFibGVDb2x1bW5EZWZhdWx0Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgIHZhbHVlRm9ybWF0dGVyOiB0aGlzLmNyZWF0ZWRBdEZvcm1hdHRlcixcbiAgICAgICAgICAgICAgICByZXNpemFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgc29ydGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgc29ydENvbHVtbjogdGhpcy5zb3J0LmJpbmQodGhpcyksXG4gICAgICAgICAgICAgICAgY2VsbENsYXNzOiAnbmYtY2VsbC12ZXJ0LWFsaWduIHRDb2wnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb2xJZDogJ2Vucm9sbG1lbnRUb2tlbicsXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdlbnJvbGxtZW50VG9rZW4nLFxuICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6ICdUb2tlbicsXG4gICAgICAgICAgICAgICAgaGVhZGVyQ29tcG9uZW50OiBUYWJsZUNvbHVtbkRlZmF1bHRDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgdmFsdWVGb3JtYXR0ZXI6IGVucm9sbG1lbnRUb2tlbkZvcm1hdHRlcixcbiAgICAgICAgICAgICAgICByZXNpemFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgY2VsbENsYXNzOiAnbmYtY2VsbC12ZXJ0LWFsaWduIHRDb2wnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb2xJZDogJ2p3dCcsXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdlbnJvbGxtZW50Snd0JyxcbiAgICAgICAgICAgICAgICBoZWFkZXJOYW1lOiAnSldUJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJDb21wb25lbnQ6IFRhYmxlQ29sdW1uRGVmYXVsdENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICBjZWxsUmVuZGVyZXI6ICdjZWxsVG9rZW5Db21wb25lbnQnLFxuICAgICAgICAgICAgICAgIHJlc2l6YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjZWxsQ2xhc3M6ICduZi1jZWxsLXZlcnQtYWxpZ24gdENvbCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy5JRF9DT0xVTU5fREVGXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHRoaXMuZXh0U2VydmljZS5wcm9jZXNzVGFibGVDb2x1bW5zKSB7XG4gICAgICAgICAgICB0YWJsZUNvbHVtbnMgPSB0aGlzLmV4dFNlcnZpY2UucHJvY2Vzc1RhYmxlQ29sdW1ucyh0YWJsZUNvbHVtbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRhYmxlQ29sdW1ucztcbiAgICB9XG5cbiAgICBnZXREYXRhKGZpbHRlcnM/OiBGaWx0ZXJPYmpbXSwgc29ydD86IGFueSwgcGFnZT86IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIC8vIHdlIGNhbiBjdXN0b21pemUgZmlsdGVycyBvciBzb3J0aW5nIGhlcmUgYmVmb3JlIG1vdmluZyBvbi4uLlxuICAgICAgICB0aGlzLnBhZ2luZy5wYWdlID0gcGFnZSB8fCB0aGlzLnBhZ2luZy5wYWdlO1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0VGFibGVEYXRhKCdlZGdlLXJvdXRlcnMnLCB0aGlzLnBhZ2luZywgZmlsdGVycywgc29ydClcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHRzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRGF0YShyZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc0RhdGEocmVzdWx0czogYW55KSB7XG4gICAgICAgIGlmICghaXNFbXB0eShyZXN1bHRzPy5kYXRhKSkge1xuICAgICAgICAgICAgLy9wcmUtcHJvY2VzcyBkYXRhIGJlZm9yZSByZW5kZXJpbmdcbiAgICAgICAgICAgIHJlc3VsdHMuZGF0YSA9IHRoaXMuYWRkQWN0aW9uc1BlclJvdyhyZXN1bHRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEFjdGlvbnNQZXJSb3cocmVzdWx0czogYW55KTogYW55W10ge1xuICAgICAgICByZXR1cm4gcmVzdWx0cy5kYXRhLm1hcCgocm93KSA9PiB7XG4gICAgICAgICAgICByb3cuYWN0aW9uTGlzdCA9IFsndXBkYXRlJywgJ3JlLWVucm9sbCcsICdkZWxldGUnXTtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc0Vucm9sbWVudFRva2VuKHJvdykpIHtcbiAgICAgICAgICAgICAgICByb3cuYWN0aW9uTGlzdC5wdXNoKCdkb3dubG9hZC1lbnJvbGxtZW50Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFkZExpc3RJdGVtRXh0ZW5zaW9uQWN0aW9ucyhyb3cpO1xuICAgICAgICAgICAgcmV0dXJuIHJvdztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaGFzRW5yb2xtZW50VG9rZW4oaXRlbSkge1xuICAgICAgICByZXR1cm4gIWlzRW1wdHkoaXRlbT8uZW5yb2xsbWVudEp3dCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEVkZ2VSb3V0ZXJSb2xlQXR0cmlidXRlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueml0aVNlcnZpY2UuZ2V0KCdlZGdlLXJvdXRlci1yb2xlLWF0dHJpYnV0ZXMnLCB7fSwgW10pO1xuICAgIH1cblxuXG4gICAgZ2V0SldUKGlkZW50aXR5OiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIGlkZW50aXR5LmVucm9sbG1lbnRKd3Q7XG4gICAgfVxuXG4gICAgZG93bmxvYWRKV1Qoand0LCBuYW1lKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdocmVmJywgJ2RhdGE6YXBwbGljYXRpb24veml0aS1qd3Q7Y2hhcnNldD11dGYtOCwnICsgZW5jb2RlVVJJQ29tcG9uZW50KGp3dCkpO1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBuYW1lK1wiLmp3dFwiKTtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgICAgICBlbGVtZW50LmNsaWNrKCk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmVlbnJvbGwocm91dGVyOiBhbnkpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgIGFwcGVuZElkOiAnUmVlbnJvbGxSb3V0ZXInLFxuICAgICAgICAgICAgdGl0bGU6ICdSZS1FbnJvbGwgUm91dGVyJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGA8cD5JZiB0aGUgcm91dGVyIGlzIGN1cnJlbnRseSBjb25uZWN0ZWQsIGl0IHdpbGwgYmUgZGlzY29ubmVjdGVkIHVudGlsIHRoZSBlbnJvbGxtZW50IHByb2Nlc3MgaXMgY29tcGxldGVkIHdpdGggdGhlIG5ld2x5IGdlbmVyYXRlZCBKV1QuIDxwPiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcmUtZW5yb2xsIHRoZSBzZWxlY3RlZCByb3V0ZXI/YCxcbiAgICAgICAgICAgIGNvbmZpcm1MYWJlbDogJ1llcycsXG4gICAgICAgICAgICBjYW5jZWxMYWJlbDogJ09vcHMsIG5vIGdldCBtZSBvdXQgb2YgaGVyZScsXG4gICAgICAgICAgICBzaG93Q2FuY2VsTGluazogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nRm9ybS5vcGVuKENvbmZpcm1Db21wb25lbnQsIHtcbiAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkudG9Qcm9taXNlKCkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzdWx0Py5jb25maXJtZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy56aXRpU2VydmljZS5wb3N0KGBlZGdlLXJvdXRlcnMvJHtyb3V0ZXIuaWR9L3JlLWVucm9sbGAsIHt9LCB0cnVlKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYFJlLWVucm9sbCBDb25maXJtZWRgLFxuICAgICAgICAgICAgICAgICAgICAgICAgYFJvdXRlciByZS1lbnJvbGwgd2FzIHNlbnQuIEEgbmV3IGVucm9sbG1lbnQgdG9rZW4gaXMgbm93IGF2YWlsYWJsZWAsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9wZW5VcGRhdGUoaXRlbT86IGFueSkge1xuICAgICAgICB0aGlzLm1vZGFsVHlwZSA9ICdlZGdlLXJvdXRlcic7XG4gICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRWRnZVJvdXRlciA9IGl0ZW07XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRWRnZVJvdXRlci5iYWRnZXMgPSBbXTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRWRnZVJvdXRlci5pc09ubGluZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRFZGdlUm91dGVyLmJhZGdlcy5wdXNoKHtsYWJlbDogJ09ubGluZScsIGNsYXNzOiAnb25saW5lJywgY2lyY2xlOiAndHJ1ZSd9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEVkZ2VSb3V0ZXIuYmFkZ2VzLnB1c2goe2xhYmVsOiAnT2ZmbGluZScsIGNsYXNzOiAnb2ZmbGluZScsIGNpcmNsZTogJ2ZhbHNlJ30pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkRWRnZVJvdXRlci5pc1ZlcmlmaWVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEVkZ2VSb3V0ZXIuYmFkZ2VzLnB1c2goe2xhYmVsOiAnVW52ZXJpZmllZCcsIGNsYXNzOiAndW5yZWcnfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUT0RPOiBpbXBsZW1lbnQgd2hlbiBtZXRyaWNzIGFuZCBkaWFsb2cgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZVxuICAgICAgICAgICAgLyp0aGlzLnNlbGVjdGVkRWRnZVJvdXRlcloubW9yZUFjdGlvbnMgPSBbXG4gICAgICAgICAgICAgICAge25hbWU6ICdvcGVuLW1ldHJpY3MnLCBsYWJlbDogJ09wZW4gTWV0cmljcyd9LFxuICAgICAgICAgICAgICAgIHtuYW1lOiAnZGlhbC1sb2dzJywgbGFiZWw6ICdEaWFsIExvZ3MnfSxcbiAgICAgICAgICAgICAgICB7bmFtZTogJ2RpYWwtbG9ncycsIGxhYmVsOiAnVmlldyBFdmVudHMnfSxcbiAgICAgICAgICAgIF07Ki9cbiAgICAgICAgICAgIHVuc2V0KHRoaXMuc2VsZWN0ZWRFZGdlUm91dGVyLCAnX2xpbmtzJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRWRnZVJvdXRlciA9IG5ldyBFZGdlUm91dGVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zaWRlTW9kYWxPcGVuID0gdHJ1ZTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,130 @@
1
+ import { Component, Inject } from '@angular/core';
2
+ import { ZITI_DATA_SERVICE } from '../../services/ziti-data.service';
3
+ import { Subscription } from 'rxjs';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../../features/messaging/growler.service";
6
+ import * as i2 from "@angular/common";
7
+ import * as i3 from "@angular/router";
8
+ import * as i4 from "../../services/ziti-data.service";
9
+ const { L } = window;
10
+ export class GeolocateComponent {
11
+ constructor(zitiService, growlerService) {
12
+ this.zitiService = zitiService;
13
+ this.growlerService = growlerService;
14
+ this.isLoading = false;
15
+ this.pageTitle = 'Dashboard';
16
+ this.totalIdentities = 0;
17
+ this.totalServices = 0;
18
+ this.totalConfigs = 0;
19
+ this.totalEdgeRouters = 0;
20
+ this.totalServicePolicies = 0;
21
+ this.totalSessions = 0;
22
+ this.showVisualizer = false;
23
+ this.markers = [];
24
+ this.subscription = new Subscription();
25
+ this.edgeRoutersInit = false;
26
+ this.identitiesInit = false;
27
+ }
28
+ ngOnInit() {
29
+ this.map = L.map('MainMap', { zoomControl: false });
30
+ L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
31
+ attribution: '© NetFoundry Inc.'
32
+ }).addTo(this.map);
33
+ this.map.setView(new L.LatLng(41.850033, -87.6500523), 4);
34
+ this.loadEntityCounts();
35
+ this.checkVisualizerFeature();
36
+ this.loadMapData();
37
+ }
38
+ loadEntityCounts() {
39
+ this.isLoading = true;
40
+ const paging = {
41
+ searchOn: 'name',
42
+ filter: '',
43
+ total: 1,
44
+ page: 1,
45
+ sort: 'name',
46
+ order: 'asc'
47
+ };
48
+ const summaryPromise = this.zitiService.get('summary', paging, []);
49
+ summaryPromise.then((result) => {
50
+ const data = result?.data || [];
51
+ this.totalIdentities = data['identities'];
52
+ this.totalEdgeRouters = data['routers.edge'];
53
+ this.totalServices = data['services'];
54
+ this.totalConfigs = data['configs'];
55
+ this.totalServicePolicies = data['servicePolicies'];
56
+ this.totalSessions = data['sessions'];
57
+ }).finally(() => {
58
+ this.isLoading = false;
59
+ });
60
+ }
61
+ loadMapData() {
62
+ this.markers = [];
63
+ const paging = {
64
+ searchOn: 'name',
65
+ filter: '',
66
+ total: 1000,
67
+ page: 1,
68
+ sort: 'name',
69
+ order: 'asc'
70
+ };
71
+ const identitiesPromise = this.zitiService.get('identities', paging, []).then((result) => {
72
+ this.identitiesInit = true;
73
+ this.addMarkers(result?.data, 'identity');
74
+ });
75
+ const routersPromise = this.zitiService.get('routers', paging, []);
76
+ const edgeRoutersPromise = this.zitiService.get('edge-routers', paging, []);
77
+ Promise.all([edgeRoutersPromise, routersPromise]).then((results) => {
78
+ this.edgeRoutersInit = true;
79
+ const routers = results[0].data || [];
80
+ const edgeRouters = results[1].data || [];
81
+ const rows = [...routers, ...edgeRouters];
82
+ this.addMarkers(rows, 'routers');
83
+ });
84
+ }
85
+ addMarkers(data, type) {
86
+ const iconUrl = type === 'identity' ? '/assets/svgs/identity-marker.svg' : '/assets/svgs/router-marker.svg';
87
+ const icon = L.icon({
88
+ iconUrl,
89
+ iconRetinaUrl: iconUrl,
90
+ shadowUrl: '/assets/scripts/components/leaflet/images/marker-shadow.png',
91
+ iconSize: [40, 60],
92
+ iconAnchor: [20, 54],
93
+ popupAnchor: [0, -50],
94
+ tooltipAnchor: [16, -28],
95
+ shadowSize: [62, 62]
96
+ });
97
+ const markers = [];
98
+ for (const item of data) {
99
+ if (item.tags?.geolocation) {
100
+ const [lat, lng] = item.tags.geolocation.split(',');
101
+ if (!isNaN(lat) && !isNaN(lng)) {
102
+ const marker = L.marker([lat, lng], { icon }).addTo(this.map).bindPopup(item.name);
103
+ markers.push(marker);
104
+ }
105
+ }
106
+ }
107
+ this.markers = [...this.markers, ...markers];
108
+ if (this.edgeRoutersInit && this.identitiesInit && markers.length > 0) {
109
+ const group = new L.featureGroup(this.markers);
110
+ this.map.fitBounds(group.getBounds());
111
+ }
112
+ }
113
+ checkVisualizerFeature() {
114
+ const urlParams = new URLSearchParams(window.location.search);
115
+ this.showVisualizer = urlParams.get('feature') === 'visualizer';
116
+ }
117
+ ngOnDestroy() {
118
+ this.subscription.unsubscribe();
119
+ }
120
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GeolocateComponent, deps: [{ token: ZITI_DATA_SERVICE }, { token: i1.GrowlerService }], target: i0.ɵɵFactoryTarget.Component }); }
121
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: GeolocateComponent, selector: "lib-geolocate", ngImport: i0, template: "<div class=\"ziti-page-container\">\n <div class=\"overlay\"></div>\n <div class=\"header\">\n <div class=\"title\">\n <span>{{pageTitle}}</span>\n </div>\n </div>\n <div class=\"header-row-container\" [class.exp]=\"showVisualizer\">\n <div class=\"entity-count-container\" [class.exp]=\"showVisualizer\">\n <div class=\"dial\"></div>\n <a routerLink=\"/identities\">\n <div class=\"totalPod\">\n <div class=\"total\">{{totalIdentities}}</div>\n <div class=\"label\">Identities</div>\n </div>\n </a>\n <a routerLink=\"/services\">\n <div class=\"totalPod\">\n <div class=\"total\">{{totalServices}}</div>\n <div class=\"label\">Services</div>\n </div>\n </a>\n <a routerLink=\"/configs\" class=\"desktop\">\n <div class=\"totalPod\">\n <div class=\"total\">{{totalConfigs}}</div>\n <div class=\"label\">Configurations</div>\n </div>\n </a>\n <a routerLink=\"/routers\" class=\"desktop\">\n <div class=\"totalPod\">\n <div class=\"total\">{{totalEdgeRouters}}</div>\n <div class=\"label\">Routers</div>\n </div>\n </a>\n <a routerLink=\"/sessions\" class=\"desktop\">\n <div class=\"totalPod\">\n <div class=\"total\">{{totalSessions}}</div>\n <div class=\"label\">Sessions</div>\n </div>\n </a>\n <a routerLink=\"/service-policies\" class=\"desktop\">\n <div class=\"totalPod\">\n <div class=\"total\">{{totalServicePolicies}}</div>\n <div class=\"label\">Service Policies</div>\n </div>\n </a>\n </div>\n <div class=\"icon-links-container\" [class.exp]=\"showVisualizer\">\n <a id=\"NetVisualizer\" routerLink=\"/network-visualizer\" *ngIf=\"showVisualizer\">\n <div class=\"icon-link-pod\">\n <div class=\"network-visualizer\"></div>\n <div class=\"label\">Network</div>\n <div class=\"label\">Visualizer</div>\n </div>\n </a>\n <a href=\"https://docs.openziti.io/docs/downloads\" target=\"_blank\">\n <div class=\"icon-link-pod\">\n <div class=\"downloads\"></div>\n <div class=\"label\">Downloads</div>\n </div>\n </a>\n <a href=\"https://docs.openziti.io/\" target=\"_blank\">\n <div class=\"icon-link-pod\">\n <div class=\"docs\"></div>\n <div class=\"label\">Docs</div>\n </div>\n </a>\n </div>\n </div>\n <div id=\"MainMap\" class=\"map-container\"></div>\n</div>\n", styles: [".overlay{left:0;top:0;position:absolute;width:100%;height:100%;background:linear-gradient(52deg,var(--primary) 0%,var(--secondary) 80%,var(--secondary) 100%);opacity:.2}.entity-count-container{grid-template-columns:3.125rem 15% auto 15% 15% 15% 15%;column-gap:1.25rem;border-width:.1875rem;border-style:solid;border-color:var(--white);background-color:#ffffff80;padding:1.375rem;border-radius:var(--podBorderRadius);z-index:10;box-shadow:var(--shadowLarge);display:grid;grid-gap:.1875rem}#MainMap{height:calc(100% - 200px)}.header-row-container{display:grid;margin-top:1.25rem;grid-template-columns:auto 25%;column-gap:1rem;row-gap:1rem;width:100%}.header-row-container.exp{grid-template-columns:auto 30%}.icon-links-container{grid-template-columns:calc(50% - .9rem) calc(50% - .9rem);column-gap:1rem;z-index:10;display:grid;grid-gap:1rem}.icon-links-container.exp{grid-template-columns:calc(33% - .6rem) calc(33% - .6rem) calc(33% - .6rem)}.dial{background-image:url(/assets/svgs/dial.svg);background-size:contain;width:3.75rem;height:100%;background-position:center}.icon-link-pod{border-width:.1875rem;border-style:solid;border-color:var(--white);background-color:#ffffff80;border-radius:var(--podBorderRadius);padding:.8125rem;z-index:10;box-shadow:var(--shadowLarge);transition:var(--transition);cursor:pointer;height:6.875rem;display:flex;flex-direction:column;align-items:center;justify-content:center}.icon-link-pod:hover{background-color:#fff}.icon-link-pod .label{font-size:.875rem;text-transform:uppercase;color:var(--menu);font-weight:600;transition:var(--transition);margin-top:-.1875rem;width:100%;text-align:center;font-family:Open Sans,sans-serif;margin-top:0rem}.icon-link-pod .downloads{background-image:url(/assets/svgs/downloads.svg);background-size:contain;width:100%;height:3.5rem;background-position:center}.icon-link-pod .docs{background-image:url(/assets/svgs/docs.svg);background-size:contain;width:100%;height:3.5rem;background-position:center}.icon-link-pod .network-visualizer{background-image:url(/assets/svgs/v8visualizer.svg);background-size:contain;width:3.125rem;height:3.125rem;background-position:center}.ziti-page-container{padding-bottom:1.25rem}.ziti-page-container #MainMap{position:relative;width:100%;height:calc(100vh - 13.75rem);z-index:10;border-radius:var(--podBorderRadius);box-shadow:var(--shadowLarge);margin-top:1.25rem;box-shadow:var(--formFieldBoxShaddow)}.totalPod{width:100%;height:3.75rem;color:var(--black);padding:0rem .75rem .75rem;text-align:center;border-right:var(--white);border-right-width:.1875rem;border-right-style:none;cursor:pointer;transition:var(--transition)}.totalPod .total{font-size:2rem;color:var(--primary);font-weight:600;transition:var(--transition);line-height:2.5rem}.totalPod .label{font-size:.875rem;text-transform:uppercase;color:var(--menu);font-weight:600;transition:var(--transition);margin-top:-.1875rem;width:100%;text-align:center}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] }); }
122
+ }
123
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GeolocateComponent, decorators: [{
124
+ type: Component,
125
+ args: [{ selector: 'lib-geolocate', template: "<div class=\"ziti-page-container\">\n <div class=\"overlay\"></div>\n <div class=\"header\">\n <div class=\"title\">\n <span>{{pageTitle}}</span>\n </div>\n </div>\n <div class=\"header-row-container\" [class.exp]=\"showVisualizer\">\n <div class=\"entity-count-container\" [class.exp]=\"showVisualizer\">\n <div class=\"dial\"></div>\n <a routerLink=\"/identities\">\n <div class=\"totalPod\">\n <div class=\"total\">{{totalIdentities}}</div>\n <div class=\"label\">Identities</div>\n </div>\n </a>\n <a routerLink=\"/services\">\n <div class=\"totalPod\">\n <div class=\"total\">{{totalServices}}</div>\n <div class=\"label\">Services</div>\n </div>\n </a>\n <a routerLink=\"/configs\" class=\"desktop\">\n <div class=\"totalPod\">\n <div class=\"total\">{{totalConfigs}}</div>\n <div class=\"label\">Configurations</div>\n </div>\n </a>\n <a routerLink=\"/routers\" class=\"desktop\">\n <div class=\"totalPod\">\n <div class=\"total\">{{totalEdgeRouters}}</div>\n <div class=\"label\">Routers</div>\n </div>\n </a>\n <a routerLink=\"/sessions\" class=\"desktop\">\n <div class=\"totalPod\">\n <div class=\"total\">{{totalSessions}}</div>\n <div class=\"label\">Sessions</div>\n </div>\n </a>\n <a routerLink=\"/service-policies\" class=\"desktop\">\n <div class=\"totalPod\">\n <div class=\"total\">{{totalServicePolicies}}</div>\n <div class=\"label\">Service Policies</div>\n </div>\n </a>\n </div>\n <div class=\"icon-links-container\" [class.exp]=\"showVisualizer\">\n <a id=\"NetVisualizer\" routerLink=\"/network-visualizer\" *ngIf=\"showVisualizer\">\n <div class=\"icon-link-pod\">\n <div class=\"network-visualizer\"></div>\n <div class=\"label\">Network</div>\n <div class=\"label\">Visualizer</div>\n </div>\n </a>\n <a href=\"https://docs.openziti.io/docs/downloads\" target=\"_blank\">\n <div class=\"icon-link-pod\">\n <div class=\"downloads\"></div>\n <div class=\"label\">Downloads</div>\n </div>\n </a>\n <a href=\"https://docs.openziti.io/\" target=\"_blank\">\n <div class=\"icon-link-pod\">\n <div class=\"docs\"></div>\n <div class=\"label\">Docs</div>\n </div>\n </a>\n </div>\n </div>\n <div id=\"MainMap\" class=\"map-container\"></div>\n</div>\n", styles: [".overlay{left:0;top:0;position:absolute;width:100%;height:100%;background:linear-gradient(52deg,var(--primary) 0%,var(--secondary) 80%,var(--secondary) 100%);opacity:.2}.entity-count-container{grid-template-columns:3.125rem 15% auto 15% 15% 15% 15%;column-gap:1.25rem;border-width:.1875rem;border-style:solid;border-color:var(--white);background-color:#ffffff80;padding:1.375rem;border-radius:var(--podBorderRadius);z-index:10;box-shadow:var(--shadowLarge);display:grid;grid-gap:.1875rem}#MainMap{height:calc(100% - 200px)}.header-row-container{display:grid;margin-top:1.25rem;grid-template-columns:auto 25%;column-gap:1rem;row-gap:1rem;width:100%}.header-row-container.exp{grid-template-columns:auto 30%}.icon-links-container{grid-template-columns:calc(50% - .9rem) calc(50% - .9rem);column-gap:1rem;z-index:10;display:grid;grid-gap:1rem}.icon-links-container.exp{grid-template-columns:calc(33% - .6rem) calc(33% - .6rem) calc(33% - .6rem)}.dial{background-image:url(/assets/svgs/dial.svg);background-size:contain;width:3.75rem;height:100%;background-position:center}.icon-link-pod{border-width:.1875rem;border-style:solid;border-color:var(--white);background-color:#ffffff80;border-radius:var(--podBorderRadius);padding:.8125rem;z-index:10;box-shadow:var(--shadowLarge);transition:var(--transition);cursor:pointer;height:6.875rem;display:flex;flex-direction:column;align-items:center;justify-content:center}.icon-link-pod:hover{background-color:#fff}.icon-link-pod .label{font-size:.875rem;text-transform:uppercase;color:var(--menu);font-weight:600;transition:var(--transition);margin-top:-.1875rem;width:100%;text-align:center;font-family:Open Sans,sans-serif;margin-top:0rem}.icon-link-pod .downloads{background-image:url(/assets/svgs/downloads.svg);background-size:contain;width:100%;height:3.5rem;background-position:center}.icon-link-pod .docs{background-image:url(/assets/svgs/docs.svg);background-size:contain;width:100%;height:3.5rem;background-position:center}.icon-link-pod .network-visualizer{background-image:url(/assets/svgs/v8visualizer.svg);background-size:contain;width:3.125rem;height:3.125rem;background-position:center}.ziti-page-container{padding-bottom:1.25rem}.ziti-page-container #MainMap{position:relative;width:100%;height:calc(100vh - 13.75rem);z-index:10;border-radius:var(--podBorderRadius);box-shadow:var(--shadowLarge);margin-top:1.25rem;box-shadow:var(--formFieldBoxShaddow)}.totalPod{width:100%;height:3.75rem;color:var(--black);padding:0rem .75rem .75rem;text-align:center;border-right:var(--white);border-right-width:.1875rem;border-right-style:none;cursor:pointer;transition:var(--transition)}.totalPod .total{font-size:2rem;color:var(--primary);font-weight:600;transition:var(--transition);line-height:2.5rem}.totalPod .label{font-size:.875rem;text-transform:uppercase;color:var(--menu);font-weight:600;transition:var(--transition);margin-top:-.1875rem;width:100%;text-align:center}\n"] }]
126
+ }], ctorParameters: function () { return [{ type: i4.ZitiDataService, decorators: [{
127
+ type: Inject,
128
+ args: [ZITI_DATA_SERVICE]
129
+ }] }, { type: i1.GrowlerService }]; } });
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbG9jYXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9wYWdlcy9nZW9sb2NhdGUvZ2VvbG9jYXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9wYWdlcy9nZW9sb2NhdGUvZ2VvbG9jYXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQXFCLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUMsaUJBQWlCLEVBQWtCLE1BQU0sa0NBQWtDLENBQUM7QUFDcEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7O0FBR3BDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxNQUFhLENBQUM7QUFPNUIsTUFBTSxPQUFPLGtCQUFrQjtJQW1CN0IsWUFDdUMsV0FBNEIsRUFDdkQsY0FBOEI7UUFESCxnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDdkQsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBcEIxQyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWxCLGNBQVMsR0FBRyxXQUFXLENBQUM7UUFDeEIsb0JBQWUsR0FBRyxDQUFDLENBQUM7UUFDcEIsa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFDbEIsaUJBQVksR0FBRyxDQUFDLENBQUM7UUFDakIscUJBQWdCLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLHlCQUFvQixHQUFHLENBQUMsQ0FBQztRQUN6QixrQkFBYSxHQUFHLENBQUMsQ0FBQztRQUNsQixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUV2QixZQUFPLEdBQUcsRUFBRSxDQUFDO1FBRUwsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRTFDLG9CQUFlLEdBQUcs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QUMsTUFBTSxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLFlBQVksQ0FBQztJQUNsRSxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbEMsQ0FBQzsrR0EzSFUsa0JBQWtCLGtCQW9CakIsaUJBQWlCO21HQXBCbEIsa0JBQWtCLHFEQ1ovQiw4Z0dBdUVBOzs0RkQzRGEsa0JBQWtCO2tCQUw5QixTQUFTOytCQUNFLGVBQWU7OzBCQXdCcEIsTUFBTTsyQkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIEluamVjdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1pJVElfREFUQV9TRVJWSUNFLCBaaXRpRGF0YVNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ppdGktZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtHcm93bGVyU2VydmljZX0gZnJvbSBcIi4uLy4uL2ZlYXR1cmVzL21lc3NhZ2luZy9ncm93bGVyLnNlcnZpY2VcIjtcblxuY29uc3QgeyBMIH0gPSB3aW5kb3cgYXMgYW55O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZ2VvbG9jYXRlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dlb2xvY2F0ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dlb2xvY2F0ZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEdlb2xvY2F0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgaXNMb2FkaW5nID0gZmFsc2U7XG4gIG1hcDogYW55O1xuICBwYWdlVGl0bGUgPSAnRGFzaGJvYXJkJztcbiAgdG90YWxJZGVudGl0aWVzID0gMDtcbiAgdG90YWxTZXJ2aWNlcyA9IDA7XG4gIHRvdGFsQ29uZmlncyA9IDA7XG4gIHRvdGFsRWRnZVJvdXRlcnMgPSAwO1xuICB0b3RhbFNlcnZpY2VQb2xpY2llcyA9IDA7XG4gIHRvdGFsU2Vzc2lvbnMgPSAwO1xuICBzaG93VmlzdWFsaXplciA9IGZhbHNlO1xuXG4gIG1hcmtlcnMgPSBbXTtcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBlZGdlUm91dGVyc0luaXQgPSBmYWxzZTtcbiAgaWRlbnRpdGllc0luaXQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIEBJbmplY3QoWklUSV9EQVRBX1NFUlZJQ0UpIHByaXZhdGUgeml0aVNlcnZpY2U6IFppdGlEYXRhU2VydmljZSxcbiAgICAgIHByaXZhdGUgZ3Jvd2xlclNlcnZpY2U6IEdyb3dsZXJTZXJ2aWNlLFxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5tYXAgPSBMLm1hcCgnTWFpbk1hcCcsIHsgem9vbUNvbnRyb2w6IGZhbHNlIH0pO1xuICAgIEwudGlsZUxheWVyKCdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsIHtcbiAgICAgIGF0dHJpYnV0aW9uOiAnJmNvcHk7IE5ldEZvdW5kcnkgSW5jLidcbiAgICB9KS5hZGRUbyh0aGlzLm1hcCk7XG4gICAgdGhpcy5tYXAuc2V0VmlldyhuZXcgTC5MYXRMbmcoNDEuODUwMDMzLCAtODcuNjUwMDUyMyksIDQpO1xuXG4gICAgdGhpcy5sb2FkRW50aXR5Q291bnRzKCk7XG4gICAgdGhpcy5jaGVja1Zpc3VhbGl6ZXJGZWF0dXJlKCk7XG4gICAgdGhpcy5sb2FkTWFwRGF0YSgpO1xuICB9XG5cbiAgbG9hZEVudGl0eUNvdW50cygpIHtcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgY29uc3QgcGFnaW5nID0ge1xuICAgICAgc2VhcmNoT246ICduYW1lJyxcbiAgICAgIGZpbHRlcjogJycsXG4gICAgICB0b3RhbDogMSxcbiAgICAgIHBhZ2U6IDEsXG4gICAgICBzb3J0OiAnbmFtZScsXG4gICAgICBvcmRlcjogJ2FzYydcbiAgICB9O1xuICAgIGNvbnN0IHN1bW1hcnlQcm9taXNlID0gdGhpcy56aXRpU2VydmljZS5nZXQoJ3N1bW1hcnknLCBwYWdpbmcsIFtdKTtcblxuICAgIHN1bW1hcnlQcm9taXNlLnRoZW4oKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gcmVzdWx0Py5kYXRhIHx8IFtdO1xuICAgICAgdGhpcy50b3RhbElkZW50aXRpZXMgPSBkYXRhWydpZGVudGl0aWVzJ107XG4gICAgICB0aGlzLnRvdGFsRWRnZVJvdXRlcnMgPSBkYXRhWydyb3V0ZXJzLmVkZ2UnXTtcbiAgICAgIHRoaXMudG90YWxTZXJ2aWNlcyA9IGRhdGFbJ3NlcnZpY2VzJ107XG4gICAgICB0aGlzLnRvdGFsQ29uZmlncyA9IGRhdGFbJ2NvbmZpZ3MnXTtcbiAgICAgIHRoaXMudG90YWxTZXJ2aWNlUG9saWNpZXMgPSBkYXRhWydzZXJ2aWNlUG9saWNpZXMnXTtcbiAgICAgIHRoaXMudG90YWxTZXNzaW9ucyA9IGRhdGFbJ3Nlc3Npb25zJ107XG4gICAgfSkuZmluYWxseSgoKSA9PiB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgbG9hZE1hcERhdGEoKSB7XG4gICAgdGhpcy5tYXJrZXJzID0gW107XG4gICAgY29uc3QgcGFnaW5nID0ge1xuICAgICAgc2VhcmNoT246ICduYW1lJyxcbiAgICAgIGZpbHRlcjogJycsXG4gICAgICB0b3RhbDogMTAwMCxcbiAgICAgIHBhZ2U6IDEsXG4gICAgICBzb3J0OiAnbmFtZScsXG4gICAgICBvcmRlcjogJ2FzYydcbiAgICB9O1xuICAgIGNvbnN0IGlkZW50aXRpZXNQcm9taXNlID0gdGhpcy56aXRpU2VydmljZS5nZXQoJ2lkZW50aXRpZXMnLCBwYWdpbmcsIFtdKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgIHRoaXMuaWRlbnRpdGllc0luaXQgPSB0cnVlO1xuICAgICAgdGhpcy5hZGRNYXJrZXJzKHJlc3VsdD8uZGF0YSwgJ2lkZW50aXR5Jyk7XG4gICAgfSk7XG4gICAgY29uc3Qgcm91dGVyc1Byb21pc2UgPSB0aGlzLnppdGlTZXJ2aWNlLmdldCgncm91dGVycycsIHBhZ2luZywgW10pO1xuICAgIGNvbnN0IGVkZ2VSb3V0ZXJzUHJvbWlzZSA9IHRoaXMueml0aVNlcnZpY2UuZ2V0KCdlZGdlLXJvdXRlcnMnLCBwYWdpbmcsIFtdKVxuICAgIFByb21pc2UuYWxsKFtlZGdlUm91dGVyc1Byb21pc2UsIHJvdXRlcnNQcm9taXNlXSkudGhlbigocmVzdWx0cykgPT4ge1xuICAgICAgdGhpcy5lZGdlUm91dGVyc0luaXQgPSB0cnVlO1xuICAgICAgY29uc3Qgcm91dGVycyA9IHJlc3VsdHNbMF0uZGF0YSB8fCBbXTtcbiAgICAgIGNvbnN0IGVkZ2VSb3V0ZXJzID0gcmVzdWx0c1sxXS5kYXRhIHx8IFtdO1xuICAgICAgY29uc3Qgcm93cyA9IFsuLi5yb3V0ZXJzLCAuLi5lZGdlUm91dGVyc107XG4gICAgICB0aGlzLmFkZE1hcmtlcnMocm93cywgJ3JvdXRlcnMnKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZE1hcmtlcnMoZGF0YTogYW55W10sIHR5cGU6IHN0cmluZykge1xuICAgIGNvbnN0IGljb25VcmwgPSB0eXBlID09PSAnaWRlbnRpdHknID8gJy9hc3NldHMvc3Zncy9pZGVudGl0eS1tYXJrZXIuc3ZnJyA6ICcvYXNzZXRzL3N2Z3Mvcm91dGVyLW1hcmtlci5zdmcnO1xuICAgIGNvbnN0IGljb24gPSBMLmljb24oe1xuICAgICAgaWNvblVybCxcbiAgICAgIGljb25SZXRpbmFVcmw6IGljb25VcmwsXG4gICAgICBzaGFkb3dVcmw6ICcvYXNzZXRzL3NjcmlwdHMvY29tcG9uZW50cy9sZWFmbGV0L2ltYWdlcy9tYXJrZXItc2hhZG93LnBuZycsXG4gICAgICBpY29uU2l6ZTogWzQwLCA2MF0sXG4gICAgICBpY29uQW5jaG9yOiBbMjAsIDU0XSxcbiAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTUwXSxcbiAgICAgIHRvb2x0aXBBbmNob3I6IFsxNiwgLTI4XSxcbiAgICAgIHNoYWRvd1NpemU6IFs2MiwgNjJdXG4gICAgfSk7XG5cbiAgICBjb25zdCBtYXJrZXJzID0gW107XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGEpIHtcbiAgICAgIGlmIChpdGVtLnRhZ3M/Lmdlb2xvY2F0aW9uKSB7XG4gICAgICAgIGNvbnN0IFtsYXQsIGxuZ10gPSBpdGVtLnRhZ3MuZ2VvbG9jYXRpb24uc3BsaXQoJywnKTtcbiAgICAgICAgaWYgKCFpc05hTihsYXQpICYmICFpc05hTihsbmcpKSB7XG4gICAgICAgICAgY29uc3QgbWFya2VyID0gTC5tYXJrZXIoW2xhdCwgbG5nXSwgeyBpY29uIH0pLmFkZFRvKHRoaXMubWFwKS5iaW5kUG9wdXAoaXRlbS5uYW1lKTtcbiAgICAgICAgICBtYXJrZXJzLnB1c2gobWFya2VyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm1hcmtlcnMgPSBbLi4udGhpcy5tYXJrZXJzLCAuLi5tYXJrZXJzXVxuICAgIGlmICh0aGlzLmVkZ2VSb3V0ZXJzSW5pdCAmJiB0aGlzLmlkZW50aXRpZXNJbml0ICYmIG1hcmtlcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZ3JvdXAgPSBuZXcgTC5mZWF0dXJlR3JvdXAodGhpcy5tYXJrZXJzKTtcbiAgICAgIHRoaXMubWFwLmZpdEJvdW5kcyhncm91cC5nZXRCb3VuZHMoKSk7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tWaXN1YWxpemVyRmVhdHVyZSgpIHtcbiAgICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuICAgIHRoaXMuc2hvd1Zpc3VhbGl6ZXIgPSB1cmxQYXJhbXMuZ2V0KCdmZWF0dXJlJykgPT09ICd2aXN1YWxpemVyJztcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ6aXRpLXBhZ2UtY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPlxuICAgICAgICAgICAgPHNwYW4+e3twYWdlVGl0bGV9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImhlYWRlci1yb3ctY29udGFpbmVyXCIgW2NsYXNzLmV4cF09XCJzaG93VmlzdWFsaXplclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZW50aXR5LWNvdW50LWNvbnRhaW5lclwiIFtjbGFzcy5leHBdPVwic2hvd1Zpc3VhbGl6ZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaWFsXCI+PC9kaXY+XG4gICAgICAgICAgICA8YSByb3V0ZXJMaW5rPVwiL2lkZW50aXRpZXNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG90YWxQb2RcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvdGFsXCI+e3t0b3RhbElkZW50aXRpZXN9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj5JZGVudGl0aWVzPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8YSByb3V0ZXJMaW5rPVwiL3NlcnZpY2VzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvdGFsUG9kXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b3RhbFwiPnt7dG90YWxTZXJ2aWNlc319PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPlNlcnZpY2VzPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8YSByb3V0ZXJMaW5rPVwiL2NvbmZpZ3NcIiBjbGFzcz1cImRlc2t0b3BcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG90YWxQb2RcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvdGFsXCI+e3t0b3RhbENvbmZpZ3N9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj5Db25maWd1cmF0aW9uczwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPGEgcm91dGVyTGluaz1cIi9yb3V0ZXJzXCIgY2xhc3M9XCJkZXNrdG9wXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvdGFsUG9kXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b3RhbFwiPnt7dG90YWxFZGdlUm91dGVyc319PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPlJvdXRlcnM8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDxhIHJvdXRlckxpbms9XCIvc2Vzc2lvbnNcIiBjbGFzcz1cImRlc2t0b3BcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG90YWxQb2RcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvdGFsXCI+e3t0b3RhbFNlc3Npb25zfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+U2Vzc2lvbnM8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDxhIHJvdXRlckxpbms9XCIvc2VydmljZS1wb2xpY2llc1wiIGNsYXNzPVwiZGVza3RvcFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b3RhbFBvZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG90YWxcIj57e3RvdGFsU2VydmljZVBvbGljaWVzfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+U2VydmljZSBQb2xpY2llczwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9hPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImljb24tbGlua3MtY29udGFpbmVyXCIgW2NsYXNzLmV4cF09XCJzaG93VmlzdWFsaXplclwiPlxuICAgICAgICAgICAgPGEgaWQ9XCJOZXRWaXN1YWxpemVyXCIgcm91dGVyTGluaz1cIi9uZXR3b3JrLXZpc3VhbGl6ZXJcIiAqbmdJZj1cInNob3dWaXN1YWxpemVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tbGluay1wb2RcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5ldHdvcmstdmlzdWFsaXplclwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj5OZXR3b3JrPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPlZpc3VhbGl6ZXI8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczovL2RvY3Mub3BlbnppdGkuaW8vZG9jcy9kb3dubG9hZHNcIiB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1saW5rLXBvZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG93bmxvYWRzXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPkRvd25sb2FkczwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy5vcGVueml0aS5pby9cIiB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1saW5rLXBvZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG9jc1wiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj5Eb2NzPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgaWQ9XCJNYWluTWFwXCIgY2xhc3M9XCJtYXAtY29udGFpbmVyXCI+PC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -16,7 +16,6 @@
16
16
  import { Component, Inject } from '@angular/core';
17
17
  import { NavigationEnd } from '@angular/router';
18
18
  import { ListPageComponent } from "../../shared/list-page-component.class";
19
- import { ZAC_WRAPPER_SERVICE } from "../../features/wrappers/zac-wrapper-service.class";
20
19
  import { QrCodeComponent } from "../../features/qr-code/qr-code.component";
21
20
  import { ResetEnrollmentComponent } from "../../features/reset-enrollment/reset-enrollment.component";
22
21
  import { IDENTITY_EXTENSION_SERVICE } from "../../features/projectable-forms/identity/identity-form.service";
@@ -34,13 +33,11 @@ import * as i9 from "../../features/data-table/data-table.component";
34
33
  import * as i10 from "../../features/side-modal/side-modal.component";
35
34
  import * as i11 from "../../features/loading-indicator/loading-indicator.component";
36
35
  import * as i12 from "../../features/overrides/overrides.component";
37
- import * as i13 from "../../features/wrappers/zac-wrapper-service.class";
38
- class IdentitiesPageComponent extends ListPageComponent {
39
- constructor(svc, filterService, dialogForm, tabNames, zacWrapperService, router, consoleEvents, extService) {
36
+ export class IdentitiesPageComponent extends ListPageComponent {
37
+ constructor(svc, filterService, dialogForm, tabNames, router, consoleEvents, extService) {
40
38
  super(filterService, svc, consoleEvents, dialogForm, extService);
41
39
  this.svc = svc;
42
40
  this.tabNames = tabNames;
43
- this.zacWrapperService = zacWrapperService;
44
41
  this.router = router;
45
42
  this.extService = extService;
46
43
  this.title = 'Identities';
@@ -50,15 +47,11 @@ class IdentitiesPageComponent extends ListPageComponent {
50
47
  ngOnInit() {
51
48
  this.tabs = this.tabNames.getTabs('identities');
52
49
  this.svc.refreshData = this.refreshData;
53
- this.subscription.add(this.zacWrapperService.zitiUpdated.subscribe(() => {
54
- this.refreshData();
55
- }));
56
50
  this.subscription.add(this.router.events.subscribe((event) => {
57
51
  if (event instanceof NavigationEnd) {
58
52
  this.refreshData();
59
53
  }
60
54
  }));
61
- this.zacWrapperService.resetZacEvents();
62
55
  this.svc.getIdentityRoleAttributes();
63
56
  super.ngOnInit();
64
57
  }
@@ -215,18 +208,14 @@ class IdentitiesPageComponent extends ListPageComponent {
215
208
  }
216
209
  return true;
217
210
  }
218
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IdentitiesPageComponent, deps: [{ token: i1.IdentitiesPageService }, { token: i2.DataTableFilterService }, { token: i3.MatDialog }, { token: i4.TabNameService }, { token: ZAC_WRAPPER_SERVICE }, { token: i5.Router }, { token: i6.ConsoleEventsService }, { token: IDENTITY_EXTENSION_SERVICE }], target: i0.ɵɵFactoryTarget.Component }); }
211
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IdentitiesPageComponent, deps: [{ token: i1.IdentitiesPageService }, { token: i2.DataTableFilterService }, { token: i3.MatDialog }, { token: i4.TabNameService }, { token: i5.Router }, { token: i6.ConsoleEventsService }, { token: IDENTITY_EXTENSION_SERVICE }], target: i0.ɵɵFactoryTarget.Component }); }
219
212
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: IdentitiesPageComponent, selector: "lib-identities", usesInheritance: true, ngImport: i0, template: "<div class=\"ziti-page-container ziti-identities-container\">\n <lib-list-page-header [title]=\"title\"\n [tabs]=\"tabs\"\n [showAdd]=\"!itemsSelected\"\n (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n <ng-content select=\"[slot=list-page-subheader]\"></ng-content>\n <lib-data-table [tableId]=\"'identities'\"\n [rowData]=\"rowData\"\n [isLoading]=\"isLoading\"\n [columnDefinitions]=\"columnDefs\"\n (actionRequested)=\"tableAction($event)\"\n [startCount]=\"startCount\"\n [endCount]=\"endCount\"\n [totalCount]=\"totalCount\"\n [currentPage]=\"filterService.currentPage\"\n [emptyMsg]=\"'No Identities defined, Click the plus to add an Identity.'\"\n [filterApplied]=\"filterApplied\"\n [menuItems]=\"svc.menuItems\"\n [headerActions]=\"svc.tableHeaderActions\"\n [noItemsImage]=\"'No_Clients'\"\n (gridReady)=\"gridReady($event)\"\n >\n </lib-data-table>\n</div>\n<lib-side-modal [(open)]=\"svc.sideModalOpen\" [showClose]=\"false\">\n <lib-overrides\n *ngIf=\"svc.modalType === 'overrides' && svc.sideModalOpen\"\n [identity]=\"svc.selectedIdentity\"\n (close)=\"closeModal($event)\"\n ></lib-overrides>\n</lib-side-modal>\n<lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n", styles: [".ziti-page-container .action{line-height:3.75rem;top:1.5625rem;right:1.5625rem;z-index:999}.ziti-identities-container ::ng-deep .zac-wrapper-container{height:0rem;left:-62499.9375rem;position:fixed}.ziti-identities-container ::ng-deep .zac-wrapper-container .action{display:none}.ziti-ag-grid{height:100%;position:relative;width:100%}.ziti-ag-grid .ziti-ag-grid-table{height:100%;width:100%}.ziti-ag-grid .ziti-ag-grid-table .ag-root-wrapper{border-bottom-style:none}.ziti-ag-grid .ziti-ag-grid-table .ag-cell{align-items:center;display:flex}.system-policies-toggle,.hidden-results-container{position:relative;right:0;display:flex;flex-direction:row;justify-content:center;align-items:flex-start;margin-top:.625rem;padding-left:1.25rem;border-radius:var(--inputBorderRadius);padding-bottom:0;padding-right:0;padding-top:0;flex-wrap:nowrap;flex:1 0 auto}.system-policies-toggle .toggle-text,.hidden-results-container .toggle-text{font-weight:600;font-size:.75rem}.system-policies-toggle .toggle-text a,.hidden-results-container .toggle-text a{cursor:pointer}.system-policies-toggle .toggle,.hidden-results-container .toggle{width:4.6875rem;margin-left:.625rem}.system-policies-toggle .toggle.on .switch,.hidden-results-container .toggle.on .switch{left:3.25rem}.system-policies-toggle .spinner,.hidden-results-container .spinner{display:inline-block;width:.625rem;height:.625rem;border-radius:50%;background:transparent;border-top:.125rem solid var(--tableText);border-right:.125rem solid var(--tableText);border-bottom:.125rem solid transparent;border-left:.125rem solid transparent;animation:loading .5s infinite linear;margin-left:.3125rem}.hidden-results-container.loading-results{opacity:.7}.nf-cell-vert-align,.ag-row .ag-cell{align-items:center;display:flex}.hidden-columns-list{align-items:center;display:flex;flex-direction:row;margin-left:.4375rem;min-height:1.875rem;flex-wrap:wrap;flex:0 1 auto}.hidden-columns-list.hidden-results{flex-wrap:nowrap;overflow:auto}.hidden-columns-list.hidden-results .hidden-column-item{flex:1 0 auto}.hidden-columns-list::-webkit-scrollbar{height:.875rem}.hidden-columns-list .hidden-column-item{align-items:center;background-color:var(--background);border:.125rem solid var(--background);border-radius:.75rem;cursor:pointer;color:var(----stroke);font-weight:600;font-family:Open Sans,sans-serif;display:flex;flex:0 1 auto;height:1.5625rem!important;margin-left:.625rem;margin-top:.3125rem;padding:.125rem .625rem .125rem .3125rem;position:relative;text-align:center;box-shadow:unset;transform:translateY(0)}.hidden-columns-list .ag-dnd-ghost:hover{border:.125rem solid var(--primaryColor)!important}.hidden-columns-list .ag-dnd-ghost:hover .ag-dnd-ghost-label,.hidden-columns-list .ag-dnd-ghost:hover .ag-dnd-ghost-icon .ag-icon-eye-slash{color:var(--ag-alpine-active-color, var(--primaryColor))}.hidden-columns-list .ag-dnd-ghost:hover .ag-dnd-ghost-icon .ag-icon-eye-slash:before{content:\"\\f113\"}.hidden-columns-list .ag-dnd-ghost-label{line-height:initial}::ng-deep .darkmode .ag-dnd-ghost-icon .ag-icon-eye-slash{color:#fff!important}.tMenu{transition-property:opacity;z-index:99999999999;height:-moz-fit-content;height:fit-content}.tMenu.action-menu{position:fixed;width:10.9375rem}.tMenu .tActionRow{transition-property:opacity}.tMenu .tActionRow.has-icon{display:flex;flex-direction:row;align-items:center}.tMenu .tActionRow .v7Offline{background-color:var(--placeholder)}.tMenu .tActionRow .v7OnlineOffline{width:.875rem;height:.875rem;border-color:var(--placeholder)}.tMenu .tActionRow .v7OnlineOffline:hover{border-color:var(--placeholder)}.hidden-items-container{display:flex;flex-direction:row;width:100%;flex-wrap:nowrap;justify-content:space-between}.os-icon{width:1.4375rem;height:1.4375rem;background-size:1.4375rem 1.4375rem;display:inline-flex;margin-right:.5rem;margin-top:.3125rem;margin-bottom:.3125rem}::ng-deep .date-time-container{position:fixed}::ng-deep .date-time-container .p-calendar .p-inputtext{height:.0625rem;width:.0625rem;padding:0}::ng-deep .date-time-container .filter-button-container{height:3.125rem;display:flex;flex-direction:row;justify-content:center;align-items:center}::ng-deep .date-time-container .filter-button-container .toggleButton{padding-left:.3125rem;padding-right:.3125rem;width:unset}::ng-deep .date-time-container .p-calendar{height:1.875rem}::ng-deep .date-time-container .p-calendar .p-inputtext{height:1.875rem;border-top-left-radius:1.25rem;border-bottom-left-radius:1.25rem;text-indent:.3125rem}::ng-deep .date-time-container .p-calendar .p-button-icon-only{border-top-right-radius:1.25rem;border-bottom-right-radius:1.25rem}#TimeSearch{position:relative;float:left;display:inline-block;margin-left:.625rem;width:3.125rem;height:2.5rem;background-color:var(--primary)}#TimeSearch #TimeSearchList{width:2.75rem;height:0;position:absolute;top:0;left:-.125rem;overflow:hidden;transition:var(--transition);background-color:var(--menu);border-radius:.5rem;z-index:30}#TimeSearch #TimeSearchList .time{width:2.5rem;background-color:var(--background);padding-left:.5rem;padding-right:.5rem;border-radius:.5rem;line-height:1.625rem;font-size:.75rem;font-weight:700;text-align:center;margin-top:.125rem;margin-left:.125rem;left:-.125rem;top:-3.1875rem;cursor:pointer;transition:var(--transition)}#TimeSearch #TimeSearchList.open{top:-3.1875rem;width:2.75rem;height:14.125rem}#TimeSearch #TimeSelectButton{width:2.5rem;background-color:var(--background);padding-left:.5rem;padding-right:.5rem;border-radius:.5rem;line-height:1.625rem;text-align:center;font-size:.75rem;font-weight:700;margin-top:.4375rem;cursor:pointer;transition:var(--transition)}#TimeSearch #TimeSelectButton:hover,#TimeSearch #TimeSearchList .time:hover{background-color:var(--primaryColor);color:var(--white)}::ng-deep p-togglebutton .p-togglebutton.p-button{border-radius:var(--inputBorderRadius)!important;box-shadow:0 .3125rem 1.25rem #0000000d!important;margin-top:-.125rem!important}::ng-deep p-togglebutton .p-togglebutton.p-button:hover{filter:brightness(99%)!important;box-shadow:0 .3125rem 1.25rem #0000000d!important;transition:all .3s ease}::ng-deep p-togglebutton .p-togglebutton.p-button:active{filter:brightness(95%)!important;box-shadow:none!important;transform:translateY(.0625rem)!important;transition:all .3s ease}#TimeSearch #TimeSelectButton{margin-top:.25rem!important}::ng-deep .p-calendar .p-inputtext{height:2.3125rem}::ng-deep .p-inputtext{border-radius:var(--inputBorderRadius)}.calendar{display:inline-block;padding-left:.3125rem;float:left;padding-right:.625rem;margin-top:-.125rem}::ng-deep .p-datepicker:not(.p-datepicker-inline){background:var(--table);border:0 none;box-shadow:#091e4226 0 1.25rem 2rem -.5rem;border-radius:.75rem}::ng-deep .p-button.p-button-text{background-color:transparent;color:var(--primaryColor);border-color:transparent}::ng-deep .p-button.p-button-text:enabled:hover{background:var(--primaryColorShadowLight);color:var(--primaryColor);border-color:transparent}::ng-deep .p-datepicker table td>span.p-highlight{color:var(--tableText);background:var(--primaryColorShadowLight)}::ng-deep .p-inputtext:enabled:hover{border-color:var(--primaryColor)}::ng-deep .p-datepicker{padding:.5rem;padding-bottom:0;background:var(--table);color:var(--tableText);border:.0625rem solid var(--inputBorder);border-radius:.1875rem}::ng-deep .p-inputtext:enabled:focus{outline:0 none;outline-offset:0;box-shadow:0 0 0 1 var(--primaryColorShadowLight);border-color:var(--primaryColor)}::ng-deep .p-inputtext{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:1rem;color:var(--tableText);background:var(--table);padding:.5rem;border:.0625rem solid var(--inputBorder);transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s;appearance:none;border-radius:var(--inputBorderRadius)}::ng-deep .p-datepicker:not(.p-datepicker-inline) .p-datepicker-header{background:var(--table)}::ng-deep .p-datepicker .p-datepicker-header{padding:.5rem;color:var(--tableText);background:var(--table);font-weight:600;margin:0;border-bottom:.0625rem solid var(--inputBorder);border-top-right-radius:.75rem;border-top-left-radius:.75rem}::ng-deep .p-datepicker:not(.p-disabled) table td span:not(.p-highlight):not(.p-disabled):hover{background:#e9ecef;color:var(--table)}::ng-deep .p-datepicker .p-timepicker{border-top:.0625rem solid var(--background);padding:.5rem}::ng-deep .p-togglebutton.p-button{background:var(--background);border:.0625rem solid var(--inputBorder);color:var(--tableText);transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s}::ng-deep .p-datepicker .p-datepicker-buttonbar{padding:1rem 0;border-top:.0625rem solid var(--inputBorder)}::ng-deep .p-button{color:#fff;background:var(--primaryColor);border:.0625rem solid var(--primaryColor);padding:.495rem 1rem;font-size:1rem;transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s;border-radius:var(--inputBorderRadius)}::ng-deep .p-togglebutton.p-button.p-highlight{background:var(--primaryColor);border:.0625rem solid var(--primaryColor);color:var(--background)}::ng-deep .p-togglebutton.p-button.p-highlight:hover{background:var(--primaryColor);border:.0625rem solid var(--primaryColor);color:var(--background)}app-zac-wrapper{z-index:999999}\n"], dependencies: [{ kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.ListPageHeaderComponent, selector: "lib-list-page-header", inputs: ["title", "tabs", "showAdd", "hideAction"], outputs: ["actionClicked"] }, { kind: "component", type: i9.DataTableComponent, selector: "lib-data-table", inputs: ["rowData", "expandRowData", "collapseRowData", "rowValidation", "isTimeSearchAvailable", "isLoading", "tableId", "options", "validateService", "rowsToggled", "tableRefreshCount", "view", "serverSideDataSource", "allowDownload", "startCount", "endCount", "totalCount", "emptyMsg", "filterApplied", "menuItems", "headerActions", "noItemsClass", "entityTypeName", "showNoItemsAdd", "currentPage", "noItemsImage", "rowHeight", "filterName", "filterColumn", "columnDefinitions", "refreshCount"], outputs: ["actionRequested", "gridReady", "dragStart", "dragLeave", "pageChanged"] }, { kind: "component", type: i10.SideModalComponent, selector: "lib-side-modal", inputs: ["showClose", "open"], outputs: ["openChange"] }, { kind: "component", type: i11.LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }, { kind: "component", type: i12.OverridesComponent, selector: "lib-overrides", inputs: ["identity"], outputs: ["close"] }] }); }
220
213
  }
221
- export { IdentitiesPageComponent };
222
214
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IdentitiesPageComponent, decorators: [{
223
215
  type: Component,
224
216
  args: [{ selector: 'lib-identities', template: "<div class=\"ziti-page-container ziti-identities-container\">\n <lib-list-page-header [title]=\"title\"\n [tabs]=\"tabs\"\n [showAdd]=\"!itemsSelected\"\n (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n <ng-content select=\"[slot=list-page-subheader]\"></ng-content>\n <lib-data-table [tableId]=\"'identities'\"\n [rowData]=\"rowData\"\n [isLoading]=\"isLoading\"\n [columnDefinitions]=\"columnDefs\"\n (actionRequested)=\"tableAction($event)\"\n [startCount]=\"startCount\"\n [endCount]=\"endCount\"\n [totalCount]=\"totalCount\"\n [currentPage]=\"filterService.currentPage\"\n [emptyMsg]=\"'No Identities defined, Click the plus to add an Identity.'\"\n [filterApplied]=\"filterApplied\"\n [menuItems]=\"svc.menuItems\"\n [headerActions]=\"svc.tableHeaderActions\"\n [noItemsImage]=\"'No_Clients'\"\n (gridReady)=\"gridReady($event)\"\n >\n </lib-data-table>\n</div>\n<lib-side-modal [(open)]=\"svc.sideModalOpen\" [showClose]=\"false\">\n <lib-overrides\n *ngIf=\"svc.modalType === 'overrides' && svc.sideModalOpen\"\n [identity]=\"svc.selectedIdentity\"\n (close)=\"closeModal($event)\"\n ></lib-overrides>\n</lib-side-modal>\n<lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n", styles: [".ziti-page-container .action{line-height:3.75rem;top:1.5625rem;right:1.5625rem;z-index:999}.ziti-identities-container ::ng-deep .zac-wrapper-container{height:0rem;left:-62499.9375rem;position:fixed}.ziti-identities-container ::ng-deep .zac-wrapper-container .action{display:none}.ziti-ag-grid{height:100%;position:relative;width:100%}.ziti-ag-grid .ziti-ag-grid-table{height:100%;width:100%}.ziti-ag-grid .ziti-ag-grid-table .ag-root-wrapper{border-bottom-style:none}.ziti-ag-grid .ziti-ag-grid-table .ag-cell{align-items:center;display:flex}.system-policies-toggle,.hidden-results-container{position:relative;right:0;display:flex;flex-direction:row;justify-content:center;align-items:flex-start;margin-top:.625rem;padding-left:1.25rem;border-radius:var(--inputBorderRadius);padding-bottom:0;padding-right:0;padding-top:0;flex-wrap:nowrap;flex:1 0 auto}.system-policies-toggle .toggle-text,.hidden-results-container .toggle-text{font-weight:600;font-size:.75rem}.system-policies-toggle .toggle-text a,.hidden-results-container .toggle-text a{cursor:pointer}.system-policies-toggle .toggle,.hidden-results-container .toggle{width:4.6875rem;margin-left:.625rem}.system-policies-toggle .toggle.on .switch,.hidden-results-container .toggle.on .switch{left:3.25rem}.system-policies-toggle .spinner,.hidden-results-container .spinner{display:inline-block;width:.625rem;height:.625rem;border-radius:50%;background:transparent;border-top:.125rem solid var(--tableText);border-right:.125rem solid var(--tableText);border-bottom:.125rem solid transparent;border-left:.125rem solid transparent;animation:loading .5s infinite linear;margin-left:.3125rem}.hidden-results-container.loading-results{opacity:.7}.nf-cell-vert-align,.ag-row .ag-cell{align-items:center;display:flex}.hidden-columns-list{align-items:center;display:flex;flex-direction:row;margin-left:.4375rem;min-height:1.875rem;flex-wrap:wrap;flex:0 1 auto}.hidden-columns-list.hidden-results{flex-wrap:nowrap;overflow:auto}.hidden-columns-list.hidden-results .hidden-column-item{flex:1 0 auto}.hidden-columns-list::-webkit-scrollbar{height:.875rem}.hidden-columns-list .hidden-column-item{align-items:center;background-color:var(--background);border:.125rem solid var(--background);border-radius:.75rem;cursor:pointer;color:var(----stroke);font-weight:600;font-family:Open Sans,sans-serif;display:flex;flex:0 1 auto;height:1.5625rem!important;margin-left:.625rem;margin-top:.3125rem;padding:.125rem .625rem .125rem .3125rem;position:relative;text-align:center;box-shadow:unset;transform:translateY(0)}.hidden-columns-list .ag-dnd-ghost:hover{border:.125rem solid var(--primaryColor)!important}.hidden-columns-list .ag-dnd-ghost:hover .ag-dnd-ghost-label,.hidden-columns-list .ag-dnd-ghost:hover .ag-dnd-ghost-icon .ag-icon-eye-slash{color:var(--ag-alpine-active-color, var(--primaryColor))}.hidden-columns-list .ag-dnd-ghost:hover .ag-dnd-ghost-icon .ag-icon-eye-slash:before{content:\"\\f113\"}.hidden-columns-list .ag-dnd-ghost-label{line-height:initial}::ng-deep .darkmode .ag-dnd-ghost-icon .ag-icon-eye-slash{color:#fff!important}.tMenu{transition-property:opacity;z-index:99999999999;height:-moz-fit-content;height:fit-content}.tMenu.action-menu{position:fixed;width:10.9375rem}.tMenu .tActionRow{transition-property:opacity}.tMenu .tActionRow.has-icon{display:flex;flex-direction:row;align-items:center}.tMenu .tActionRow .v7Offline{background-color:var(--placeholder)}.tMenu .tActionRow .v7OnlineOffline{width:.875rem;height:.875rem;border-color:var(--placeholder)}.tMenu .tActionRow .v7OnlineOffline:hover{border-color:var(--placeholder)}.hidden-items-container{display:flex;flex-direction:row;width:100%;flex-wrap:nowrap;justify-content:space-between}.os-icon{width:1.4375rem;height:1.4375rem;background-size:1.4375rem 1.4375rem;display:inline-flex;margin-right:.5rem;margin-top:.3125rem;margin-bottom:.3125rem}::ng-deep .date-time-container{position:fixed}::ng-deep .date-time-container .p-calendar .p-inputtext{height:.0625rem;width:.0625rem;padding:0}::ng-deep .date-time-container .filter-button-container{height:3.125rem;display:flex;flex-direction:row;justify-content:center;align-items:center}::ng-deep .date-time-container .filter-button-container .toggleButton{padding-left:.3125rem;padding-right:.3125rem;width:unset}::ng-deep .date-time-container .p-calendar{height:1.875rem}::ng-deep .date-time-container .p-calendar .p-inputtext{height:1.875rem;border-top-left-radius:1.25rem;border-bottom-left-radius:1.25rem;text-indent:.3125rem}::ng-deep .date-time-container .p-calendar .p-button-icon-only{border-top-right-radius:1.25rem;border-bottom-right-radius:1.25rem}#TimeSearch{position:relative;float:left;display:inline-block;margin-left:.625rem;width:3.125rem;height:2.5rem;background-color:var(--primary)}#TimeSearch #TimeSearchList{width:2.75rem;height:0;position:absolute;top:0;left:-.125rem;overflow:hidden;transition:var(--transition);background-color:var(--menu);border-radius:.5rem;z-index:30}#TimeSearch #TimeSearchList .time{width:2.5rem;background-color:var(--background);padding-left:.5rem;padding-right:.5rem;border-radius:.5rem;line-height:1.625rem;font-size:.75rem;font-weight:700;text-align:center;margin-top:.125rem;margin-left:.125rem;left:-.125rem;top:-3.1875rem;cursor:pointer;transition:var(--transition)}#TimeSearch #TimeSearchList.open{top:-3.1875rem;width:2.75rem;height:14.125rem}#TimeSearch #TimeSelectButton{width:2.5rem;background-color:var(--background);padding-left:.5rem;padding-right:.5rem;border-radius:.5rem;line-height:1.625rem;text-align:center;font-size:.75rem;font-weight:700;margin-top:.4375rem;cursor:pointer;transition:var(--transition)}#TimeSearch #TimeSelectButton:hover,#TimeSearch #TimeSearchList .time:hover{background-color:var(--primaryColor);color:var(--white)}::ng-deep p-togglebutton .p-togglebutton.p-button{border-radius:var(--inputBorderRadius)!important;box-shadow:0 .3125rem 1.25rem #0000000d!important;margin-top:-.125rem!important}::ng-deep p-togglebutton .p-togglebutton.p-button:hover{filter:brightness(99%)!important;box-shadow:0 .3125rem 1.25rem #0000000d!important;transition:all .3s ease}::ng-deep p-togglebutton .p-togglebutton.p-button:active{filter:brightness(95%)!important;box-shadow:none!important;transform:translateY(.0625rem)!important;transition:all .3s ease}#TimeSearch #TimeSelectButton{margin-top:.25rem!important}::ng-deep .p-calendar .p-inputtext{height:2.3125rem}::ng-deep .p-inputtext{border-radius:var(--inputBorderRadius)}.calendar{display:inline-block;padding-left:.3125rem;float:left;padding-right:.625rem;margin-top:-.125rem}::ng-deep .p-datepicker:not(.p-datepicker-inline){background:var(--table);border:0 none;box-shadow:#091e4226 0 1.25rem 2rem -.5rem;border-radius:.75rem}::ng-deep .p-button.p-button-text{background-color:transparent;color:var(--primaryColor);border-color:transparent}::ng-deep .p-button.p-button-text:enabled:hover{background:var(--primaryColorShadowLight);color:var(--primaryColor);border-color:transparent}::ng-deep .p-datepicker table td>span.p-highlight{color:var(--tableText);background:var(--primaryColorShadowLight)}::ng-deep .p-inputtext:enabled:hover{border-color:var(--primaryColor)}::ng-deep .p-datepicker{padding:.5rem;padding-bottom:0;background:var(--table);color:var(--tableText);border:.0625rem solid var(--inputBorder);border-radius:.1875rem}::ng-deep .p-inputtext:enabled:focus{outline:0 none;outline-offset:0;box-shadow:0 0 0 1 var(--primaryColorShadowLight);border-color:var(--primaryColor)}::ng-deep .p-inputtext{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:1rem;color:var(--tableText);background:var(--table);padding:.5rem;border:.0625rem solid var(--inputBorder);transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s;appearance:none;border-radius:var(--inputBorderRadius)}::ng-deep .p-datepicker:not(.p-datepicker-inline) .p-datepicker-header{background:var(--table)}::ng-deep .p-datepicker .p-datepicker-header{padding:.5rem;color:var(--tableText);background:var(--table);font-weight:600;margin:0;border-bottom:.0625rem solid var(--inputBorder);border-top-right-radius:.75rem;border-top-left-radius:.75rem}::ng-deep .p-datepicker:not(.p-disabled) table td span:not(.p-highlight):not(.p-disabled):hover{background:#e9ecef;color:var(--table)}::ng-deep .p-datepicker .p-timepicker{border-top:.0625rem solid var(--background);padding:.5rem}::ng-deep .p-togglebutton.p-button{background:var(--background);border:.0625rem solid var(--inputBorder);color:var(--tableText);transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s}::ng-deep .p-datepicker .p-datepicker-buttonbar{padding:1rem 0;border-top:.0625rem solid var(--inputBorder)}::ng-deep .p-button{color:#fff;background:var(--primaryColor);border:.0625rem solid var(--primaryColor);padding:.495rem 1rem;font-size:1rem;transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s;border-radius:var(--inputBorderRadius)}::ng-deep .p-togglebutton.p-button.p-highlight{background:var(--primaryColor);border:.0625rem solid var(--primaryColor);color:var(--background)}::ng-deep .p-togglebutton.p-button.p-highlight:hover{background:var(--primaryColor);border:.0625rem solid var(--primaryColor);color:var(--background)}app-zac-wrapper{z-index:999999}\n"] }]
225
- }], ctorParameters: function () { return [{ type: i1.IdentitiesPageService }, { type: i2.DataTableFilterService }, { type: i3.MatDialog }, { type: i4.TabNameService }, { type: i13.ZacWrapperServiceClass, decorators: [{
226
- type: Inject,
227
- args: [ZAC_WRAPPER_SERVICE]
228
- }] }, { type: i5.Router }, { type: i6.ConsoleEventsService }, { type: undefined, decorators: [{
217
+ }], ctorParameters: function () { return [{ type: i1.IdentitiesPageService }, { type: i2.DataTableFilterService }, { type: i3.MatDialog }, { type: i4.TabNameService }, { type: i5.Router }, { type: i6.ConsoleEventsService }, { type: undefined, decorators: [{
229
218
  type: Inject,
230
219
  args: [IDENTITY_EXTENSION_SERVICE]
231
220
  }] }]; } });
232
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdGllcy1wYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9wYWdlcy9pZGVudGl0aWVzL2lkZW50aXRpZXMtcGFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvcGFnZXMvaWRlbnRpdGllcy9pZGVudGl0aWVzLXBhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0VBY0U7QUFFRixPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFTLGFBQWEsRUFBaUIsTUFBTSxpQkFBaUIsQ0FBQTtBQUdyRSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSx3Q0FBd0MsQ0FBQztBQUd6RSxPQUFPLEVBQXlCLG1CQUFtQixFQUFDLE1BQU0sbURBQW1ELENBQUM7QUFFOUcsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBQ3pFLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLDREQUE0RCxDQUFDO0FBQ3BHLE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLGlFQUFpRSxDQUFDO0FBRTNHLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGlGQUFpRixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFFL0gsTUFLYSx1QkFBd0IsU0FBUSxpQkFBaUI7SUFPNUQsWUFDb0IsR0FBMEIsRUFDMUMsYUFBcUMsRUFDckMsVUFBcUIsRUFDYixRQUF3QixFQUNJLGlCQUF5QyxFQUNyRSxNQUFjLEVBQ3RCLGFBQW1DLEVBQ1MsVUFBNEI7UUFFMUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMs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O2FBQ2hCO1lBQ0QsU0FBUyxFQUFFLEtBQUs7U0FDakIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNoRCxJQUFHLE1BQU0sRUFBRTtnQkFDVCxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNuQztRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVRLFdBQVc7UUFDbEIsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFO1lBQ2xELE9BQU8sT0FBTyxDQUFDLHlHQUF5RyxDQUFDLENBQUM7U0FDM0g7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7K0dBM01VLHVCQUF1QixvSkFZdEIsbUJBQW1CLHVFQUduQiwwQkFBMEI7bUdBZjNCLHVCQUF1Qiw2RUNwQ3BDLGluREFnQ0E7O1NESWEsdUJBQXVCOzRGQUF2Qix1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0UsZ0JBQWdCOzswQkFnQnJCLE1BQU07MkJBQUMsbUJBQW1COzswQkFHMUIsTUFBTTsyQkFBQywwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICAgIENvcHlyaWdodCBOZXRGb3VuZHJ5IEluYy5cblxuICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5pbXBvcnQge0NvbXBvbmVudCwgSW5qZWN0LCBPbkluaXQsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JvdXRlciwgTmF2aWdhdGlvbkVuZCwgQWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcidcbmltcG9ydCB7SWRlbnRpdGllc1BhZ2VTZXJ2aWNlfSBmcm9tIFwiLi9pZGVudGl0aWVzLXBhZ2Uuc2VydmljZVwiO1xuaW1wb3J0IHtEYXRhVGFibGVGaWx0ZXJTZXJ2aWNlLCBGaWx0ZXJPYmp9IGZyb20gXCIuLi8uLi9mZWF0dXJlcy9kYXRhLXRhYmxlL2RhdGEtdGFibGUtZmlsdGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7TGlzdFBhZ2VDb21wb25lbnR9IGZyb20gXCIuLi8uLi9zaGFyZWQvbGlzdC1wYWdlLWNvbXBvbmVudC5jbGFzc1wiO1xuaW1wb3J0IHtUYWJOYW1lU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3RhYi1uYW1lLnNlcnZpY2VcIjtcbmltcG9ydCB7TWF0RGlhbG9nfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XG5pbXBvcnQge1phY1dyYXBwZXJTZXJ2aWNlQ2xhc3MsIFpBQ19XUkFQUEVSX1NFUlZJQ0V9IGZyb20gXCIuLi8uLi9mZWF0dXJlcy93cmFwcGVycy96YWMtd3JhcHBlci1zZXJ2aWNlLmNsYXNzXCI7XG5pbXBvcnQge0NvbnNvbGVFdmVudHNTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvY29uc29sZS1ldmVudHMuc2VydmljZVwiO1xuaW1wb3J0IHtRckNvZGVDb21wb25lbnR9IGZyb20gXCIuLi8uLi9mZWF0dXJlcy9xci1jb2RlL3FyLWNvZGUuY29tcG9uZW50XCI7XG5pbXBvcnQge1Jlc2V0RW5yb2xsbWVudENvbXBvbmVudH0gZnJvbSBcIi4uLy4uL2ZlYXR1cmVzL3Jlc2V0LWVucm9sbG1lbnQvcmVzZXQtZW5yb2xsbWVudC5jb21wb25lbnRcIjtcbmltcG9ydCB7SURFTlRJVFlfRVhURU5TSU9OX1NFUlZJQ0V9IGZyb20gXCIuLi8uLi9mZWF0dXJlcy9wcm9qZWN0YWJsZS1mb3Jtcy9pZGVudGl0eS9pZGVudGl0eS1mb3JtLnNlcnZpY2VcIjtcbmltcG9ydCB7RXh0ZW5zaW9uU2VydmljZX0gZnJvbSBcIi4uLy4uL2ZlYXR1cmVzL2V4dGVuZGFibGUvZXh0ZW5zaW9ucy1ub29wLnNlcnZpY2VcIjtcbmltcG9ydCB7IElkZW50aXR5U2VydmljZVBhdGhDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vZmVhdHVyZXMvdmlzdWFsaXplci9pZGVudGl0eS1zZXJ2aWNlLXBhdGgvaWRlbnRpdHktc2VydmljZS1wYXRoLmNvbXBvbmVudFwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItaWRlbnRpdGllcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9pZGVudGl0aWVzLXBhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pZGVudGl0aWVzLXBhZ2UuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBJZGVudGl0aWVzUGFnZUNvbXBvbmVudCBleHRlbmRzIExpc3RQYWdlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIHRpdGxlID0gJ0lkZW50aXRpZXMnXG4gIHRhYnM6IHsgdXJsOiBzdHJpbmcsIGxhYmVsOiBzdHJpbmcgfVtdIDtcbiAgaXNMb2FkaW5nID0gZmFsc2U7XG4gIGZvcm1EYXRhQ2hhbmdlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHVibGljIG92ZXJyaWRlIHN2YzogSWRlbnRpdGllc1BhZ2VTZXJ2aWNlLFxuICAgICAgZmlsdGVyU2VydmljZTogRGF0YVRhYmxlRmlsdGVyU2VydmljZSxcbiAgICAgIGRpYWxvZ0Zvcm06IE1hdERpYWxvZyxcbiAgICAgIHByaXZhdGUgdGFiTmFtZXM6IFRhYk5hbWVTZXJ2aWNlLFxuICAgICAgQEluamVjdChaQUNfV1JBUFBFUl9TRVJWSUNFKXByaXZhdGUgemFjV3JhcHBlclNlcnZpY2U6IFphY1dyYXBwZXJTZXJ2aWNlQ2xhc3MsXG4gICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgICAgY29uc29sZUV2ZW50czogQ29uc29sZUV2ZW50c1NlcnZpY2UsXG4gICAgICBASW5qZWN0KElERU5USVRZX0VYVEVOU0lPTl9TRVJWSUNFKSBwcml2YXRlIGV4dFNlcnZpY2U6IEV4dGVuc2lvblNlcnZpY2UsXG4gICkge1xuICAgIHN1cGVyKGZpbHRlclNlcnZpY2UsIHN2YywgY29uc29sZUV2ZW50cywgZGlhbG9nRm9ybSwgZXh0U2VydmljZSk7XG4gIH1cblxuICBvdmVycmlkZSBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnRhYnMgPSB0aGlzLnRhYk5hbWVzLmdldFRhYnMoJ2lkZW50aXRpZXMnKTtcbiAgICB0aGlzLnN2Yy5yZWZyZXNoRGF0YSA9IHRoaXMucmVmcmVzaERhdGE7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy56YWNXcmFwcGVyU2VydmljZS56aXRpVXBkYXRlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlZnJlc2hEYXRhKCk7XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZSgoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSB7XG4gICAgICAgICAgdGhpcy5yZWZyZXNoRGF0YSgpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy56YWNXcmFwcGVyU2VydmljZS5yZXNldFphY0V2ZW50cygpO1xuICAgIHRoaXMuc3ZjLmdldElkZW50aXR5Um9sZUF0dHJpYnV0ZXMoKTtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICB9XG5cbiAgaGVhZGVyQWN0aW9uQ2xpY2tlZChhY3Rpb246IHN0cmluZykge1xuICAgIHN3aXRjaChhY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2FkZCc6XG4gICAgICAgIHRoaXMuc3ZjLm9wZW5FZGl0Rm9ybSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2VkaXQnOlxuICAgICAgICB0aGlzLnN2Yy5vcGVuVXBkYXRlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZGVsZXRlJzpcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMucm93RGF0YS5maWx0ZXIoKHJvdykgPT4ge1xuICAgICAgICAgIHJldHVybiByb3cuc2VsZWN0ZWQ7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBsYWJlbCA9IHNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMSA/ICdpZGVudGl0aWVzJyA6ICdpZGVudGl0eSc7XG4gICAgICAgIHRoaXMub3BlbkJ1bGtEZWxldGUoc2VsZWN0ZWRJdGVtcywgbGFiZWwpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9XG5cbiAgY2xvc2VNb2RhbChldmVudD8pIHtcbiAgICB0aGlzLnN2Yy5zaWRlTW9kYWxPcGVuID0gZmFsc2U7XG4gICAgaWYoZXZlbnQ/LnJlZnJlc2gpIHtcbiAgICAgIHRoaXMucmVmcmVzaERhdGEoKTtcbiAgICAgIHRoaXMuc3ZjLmdldElkZW50aXR5Um9sZUF0dHJpYnV0ZXMoKTtcbiAgICB9XG4gIH1cblxuICBkYXRhQ2hhbmdlZChldmVudCkge1xuICAgIHRoaXMuZm9ybURhdGFDaGFuZ2VkID0gZXZlbnQ7XG4gIH1cblxuICB0YWJsZUFjdGlvbihldmVudDogYW55KSB7XG4gICAgY29uc3QgZXh0ZW5zaW9uQWN0aW9uRm91bmQgPSB0aGlzLmhhbmRsZUV4dGVuc2lvbkFjdGlvbnMoZXZlbnQpO1xuICAgIGlmIChleHRlbnNpb25BY3Rpb25Gb3VuZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzd2l0Y2goZXZlbnQ/LmFjdGlvbikge1xuICAgICAgY2FzZSAndG9nZ2xlQWxsJzpcbiAgICAgICAgdGhpcy5pdGVtVG9nZ2xlZChldmVudC5pdGVtKTtcbiAgICAgICAgdGhpcy5yb3dEYXRhLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAoaXRlbS50eXBlSWQgPT09ICdSb3V0ZXInKSB7XG4gICAgICAgICAgICBpdGVtLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0b2dnbGVJdGVtJzpcbiAgICAgICAgdGhpcy5pdGVtVG9nZ2xlZChldmVudC5pdGVtKVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3VwZGF0ZSc6XG4gICAgICAgIHRoaXMuc3ZjLm9wZW5FZGl0Rm9ybShldmVudD8uaXRlbT8uaWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NyZWF0ZSc6XG4gICAgICAgIHRoaXMuc3ZjLm9wZW5FZGl0Rm9ybSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ292ZXJyaWRlJzpcbiAgICAgICAgdGhpcy5zdmMub3Blbk92ZXJyaWRlc01vZGFsKGV2ZW50Lml0ZW0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2RlbGV0ZSc6XG4gICAgICAgIHRoaXMuZGVsZXRlSXRlbShldmVudC5pdGVtKVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Rvd25sb2FkLWVucm9sbG1lbnQnOlxuICAgICAgICB0aGlzLmRvd25sb2FkSldUKGV2ZW50Lml0ZW0pXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmVzZXQtZW5yb2xsbWVudCc6XG4gICAgICAgIHRoaXMucmVzZXRFbnJvbGxtZW50KGV2ZW50Lml0ZW0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JlaXNzdWUtZW5yb2xsbWVudCc6XG4gICAgICAgIHRoaXMucmVpc3N1ZUVucm9sbG1lbnQoZXZlbnQuaXRlbSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImlkZW50aXR5LXNlcnZpY2UtcGF0aFwiOlxuICAgICAgICB0aGlzLm9wZW5JZGVudGl0eVZpc3VhbGl6ZXIoZXZlbnQuaXRlbSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInFyLWNvZGVcIjpcbiAgICAgICAgdGhpcy5zaG93UVJDb2RlKGV2ZW50Lml0ZW0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Rvd25sb2FkLWFsbCc6XG4gICAgICAgIHRoaXMuZG93bmxvYWRBbGxJdGVtcygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Rvd25sb2FkLXNlbGVjdGVkJzpcbiAgICAgICAgdGhpcy5zdmMuZG93bmxvYWRJdGVtcyh0aGlzLnNlbGVjdGVkSXRlbXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Jlc2V0LW1mYSc6XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdmMucmVzZXRNRkEoZXZlbnQuaXRlbSkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnJlZnJlc2hEYXRhKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGRvd25sb2FkSldUKGl0ZW06IGFueSkge1xuICAgIGNvbnN0IGp3dCA9IHRoaXMuc3ZjLmdldEpXVChpdGVtKTtcbiAgICB0aGlzLnN2Yy5kb3dubG9hZEpXVChqd3QsIGl0ZW0ubmFtZSk7XG4gIH1cblxuICBzaG93UVJDb2RlKGl0ZW06IGFueSkge1xuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBqd3Q6IHRoaXMuc3ZjLmdldEpXVChpdGVtKSxcbiAgICAgIGV4cGlyYXRpb246IHRoaXMuc3ZjLmdldEVucm9sbG1lbnRFeHBpcmF0aW9uKGl0ZW0pLFxuICAgICAgcXJDb2RlU2l6ZTogNDAwLFxuICAgICAgaWRlbnRpdHk6IGl0ZW0sXG4gICAgfTtcbiAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nRm9ybS5vcGVuKFFyQ29kZUNvbXBvbmVudCwge1xuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICBkZWxldGVJdGVtKGl0ZW06IGFueSkge1xuICAgIHRoaXMub3BlbkJ1bGtEZWxldGUoW2l0ZW1dLCAnaWRlbnRpdHknKTtcbiAgfVxuXG4gIG9wZW5JZGVudGl0eVZpc3VhbGl6ZXIoaWRlbnRpdHkpIHtcbiAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nRm9ybS5vcGVuKElkZW50aXR5U2VydmljZVBhdGhDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgaWRlbnRpdHk6IGlkZW50aXR5LFxuICAgICAgfSxcbiAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICByZXNldEVucm9sbG1lbnQoaWRlbnRpdHkpIHtcbiAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nRm9ybS5vcGVuKFJlc2V0RW5yb2xsbWVudENvbXBvbmVudCwge1xuICAgICAgZGF0YToge1xuICAgICAgICBpZGVudGl0eTogaWRlbnRpdHksXG4gICAgICAgIHR5cGU6ICdyZXNldCcsXG4gICAgICB9LFxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICB9KTtcbiAgICB0aGlzLmRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZihyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoRGF0YSh1bmRlZmluZWQsIHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmVpc3N1ZUVucm9sbG1lbnQoaWRlbnRpdHkpIHtcbiAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nRm9ybS5vcGVuKFJlc2V0RW5yb2xsbWVudENvbXBvbmVudCwge1xuICAgICAgZGF0YToge1xuICAgICAgICBpZGVudGl0eTogaWRlbnRpdHksXG4gICAgICAgIHR5cGU6ICdyZWlzc3VlJyxcbiAgICAgIH0sXG4gICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgIH0pO1xuICAgIHRoaXMuZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmKHJlc3VsdCkge1xuICAgICAgICB0aGlzLnJlZnJlc2hEYXRhKHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gIH1cblxuICBjYW5EZWFjdGl2YXRlKCkge1xuICAgIGlmICh0aGlzLmZvcm1EYXRhQ2hhbmdlZCAmJiB0aGlzLnN2Yy5zaWRlTW9kYWxPcGVuKSB7XG4gICAgICByZXR1cm4gY29uZmlybSgnWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzLiBEbyB5b3Ugd2FudCB0byBsZWF2ZSB0aGlzIHBhZ2UgYW5kIGRpc2NhcmQgeW91ciBjaGFuZ2VzIG9yIHN0YXkgb24gdGhpcyBwYWdlPycpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInppdGktcGFnZS1jb250YWluZXIgeml0aS1pZGVudGl0aWVzLWNvbnRhaW5lclwiPlxuICAgIDxsaWItbGlzdC1wYWdlLWhlYWRlciBbdGl0bGVdPVwidGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFic109XCJ0YWJzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dBZGRdPVwiIWl0ZW1zU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoYWN0aW9uQ2xpY2tlZCk9XCJoZWFkZXJBY3Rpb25DbGlja2VkKCRldmVudClcIj48L2xpYi1saXN0LXBhZ2UtaGVhZGVyPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltzbG90PWxpc3QtcGFnZS1zdWJoZWFkZXJdXCI+PC9uZy1jb250ZW50PlxuICAgIDxsaWItZGF0YS10YWJsZSBbdGFibGVJZF09XCInaWRlbnRpdGllcydcIlxuICAgICAgICAgICAgICAgICAgICBbcm93RGF0YV09XCJyb3dEYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgW2lzTG9hZGluZ109XCJpc0xvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICBbY29sdW1uRGVmaW5pdGlvbnNdPVwiY29sdW1uRGVmc1wiXG4gICAgICAgICAgICAgICAgICAgIChhY3Rpb25SZXF1ZXN0ZWQpPVwidGFibGVBY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdGFydENvdW50XT1cInN0YXJ0Q291bnRcIlxuICAgICAgICAgICAgICAgICAgICBbZW5kQ291bnRdPVwiZW5kQ291bnRcIlxuICAgICAgICAgICAgICAgICAgICBbdG90YWxDb3VudF09XCJ0b3RhbENvdW50XCJcbiAgICAgICAgICAgICAgICAgICAgW2N1cnJlbnRQYWdlXT1cImZpbHRlclNlcnZpY2UuY3VycmVudFBhZ2VcIlxuICAgICAgICAgICAgICAgICAgICBbZW1wdHlNc2ddPVwiJ05vIElkZW50aXRpZXMgZGVmaW5lZCwgQ2xpY2sgdGhlIHBsdXMgdG8gYWRkIGFuIElkZW50aXR5LidcIlxuICAgICAgICAgICAgICAgICAgICBbZmlsdGVyQXBwbGllZF09XCJmaWx0ZXJBcHBsaWVkXCJcbiAgICAgICAgICAgICAgICAgICAgW21lbnVJdGVtc109XCJzdmMubWVudUl0ZW1zXCJcbiAgICAgICAgICAgICAgICAgICAgW2hlYWRlckFjdGlvbnNdPVwic3ZjLnRhYmxlSGVhZGVyQWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIFtub0l0ZW1zSW1hZ2VdPVwiJ05vX0NsaWVudHMnXCJcbiAgICAgICAgICAgICAgICAgICAgKGdyaWRSZWFkeSk9XCJncmlkUmVhZHkoJGV2ZW50KVwiXG4gICAgPlxuICAgIDwvbGliLWRhdGEtdGFibGU+XG48L2Rpdj5cbjxsaWItc2lkZS1tb2RhbCBbKG9wZW4pXT1cInN2Yy5zaWRlTW9kYWxPcGVuXCIgW3Nob3dDbG9zZV09XCJmYWxzZVwiPlxuICAgIDxsaWItb3ZlcnJpZGVzXG4gICAgICAgICAgICAqbmdJZj1cInN2Yy5tb2RhbFR5cGUgPT09ICdvdmVycmlkZXMnICYmIHN2Yy5zaWRlTW9kYWxPcGVuXCJcbiAgICAgICAgICAgIFtpZGVudGl0eV09XCJzdmMuc2VsZWN0ZWRJZGVudGl0eVwiXG4gICAgICAgICAgICAoY2xvc2UpPVwiY2xvc2VNb2RhbCgkZXZlbnQpXCJcbiAgICA+PC9saWItb3ZlcnJpZGVzPlxuPC9saWItc2lkZS1tb2RhbD5cbjxsaWItbG9hZGluZy1pbmRpY2F0b3IgKm5nSWY9XCJpc0xvYWRpbmdcIiBbaXNMb2FkaW5nXT1cImlzTG9hZGluZ1wiPjwvbGliLWxvYWRpbmctaW5kaWNhdG9yPlxuIl19
221
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdGllcy1wYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9wYWdlcy9pZGVudGl0aWVzL2lkZW50aXRpZXMtcGFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvcGFnZXMvaWRlbnRpdGllcy9pZGVudGl0aWVzLXBhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0VBY0U7QUFFRixPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFTLGFBQWEsRUFBaUIsTUFBTSxpQkFBaUIsQ0FBQTtBQUdyRSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSx3Q0FBd0MsQ0FBQztBQUl6RSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDekUsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sNERBQTRELENBQUM7QUFDcEcsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0saUVBQWlFLENBQUM7QUFFM0csT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0saUZBQWlGLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBTy9ILE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxpQkFBaUI7SUFPNUQsWUFDb0IsR0FBMEIsRUFDMUMsYUFBcUMsRUFDckMsVUFBcUIsRUFDYixRQUF3QixFQUN4QixNQUFjLEVBQ3RCLGFBQW1DLEVBQ1MsVUFBNEI7UUFFMUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQVIvQyxRQUFHLEdBQUgsR0FBRyxDQUF1QjtRQUdsQyxhQUFRLEdBQVIsUUFBUSxD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SUFFRCxhQUFhO1FBQ1gsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFO1lBQ2xELE9BQU8sT0FBTyxDQUFDLHlHQUF5RyxDQUFDLENBQUM7U0FDM0g7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7K0dBcE1VLHVCQUF1Qiw4TUFjdEIsMEJBQTBCO21HQWQzQix1QkFBdUIsNkVDbkNwQyxpbkRBZ0NBOzs0RkRHYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0UsZ0JBQWdCOzswQkFrQnJCLE1BQU07MkJBQUMsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgICBDb3B5cmlnaHQgTmV0Rm91bmRyeSBJbmMuXG5cbiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuaW1wb3J0IHtDb21wb25lbnQsIEluamVjdCwgT25Jbml0LCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtSb3V0ZXIsIE5hdmlnYXRpb25FbmQsIEFjdGl2YXRlZFJvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInXG5pbXBvcnQge0lkZW50aXRpZXNQYWdlU2VydmljZX0gZnJvbSBcIi4vaWRlbnRpdGllcy1wYWdlLnNlcnZpY2VcIjtcbmltcG9ydCB7RGF0YVRhYmxlRmlsdGVyU2VydmljZSwgRmlsdGVyT2JqfSBmcm9tIFwiLi4vLi4vZmVhdHVyZXMvZGF0YS10YWJsZS9kYXRhLXRhYmxlLWZpbHRlci5zZXJ2aWNlXCI7XG5pbXBvcnQge0xpc3RQYWdlQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vc2hhcmVkL2xpc3QtcGFnZS1jb21wb25lbnQuY2xhc3NcIjtcbmltcG9ydCB7VGFiTmFtZVNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy90YWItbmFtZS5zZXJ2aWNlXCI7XG5pbXBvcnQge01hdERpYWxvZ30gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xuaW1wb3J0IHtDb25zb2xlRXZlbnRzU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2NvbnNvbGUtZXZlbnRzLnNlcnZpY2VcIjtcbmltcG9ydCB7UXJDb2RlQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vZmVhdHVyZXMvcXItY29kZS9xci1jb2RlLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtSZXNldEVucm9sbG1lbnRDb21wb25lbnR9IGZyb20gXCIuLi8uLi9mZWF0dXJlcy9yZXNldC1lbnJvbGxtZW50L3Jlc2V0LWVucm9sbG1lbnQuY29tcG9uZW50XCI7XG5pbXBvcnQge0lERU5USVRZX0VYVEVOU0lPTl9TRVJWSUNFfSBmcm9tIFwiLi4vLi4vZmVhdHVyZXMvcHJvamVjdGFibGUtZm9ybXMvaWRlbnRpdHkvaWRlbnRpdHktZm9ybS5zZXJ2aWNlXCI7XG5pbXBvcnQge0V4dGVuc2lvblNlcnZpY2V9IGZyb20gXCIuLi8uLi9mZWF0dXJlcy9leHRlbmRhYmxlL2V4dGVuc2lvbnMtbm9vcC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBJZGVudGl0eVNlcnZpY2VQYXRoQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2ZlYXR1cmVzL3Zpc3VhbGl6ZXIvaWRlbnRpdHktc2VydmljZS1wYXRoL2lkZW50aXR5LXNlcnZpY2UtcGF0aC5jb21wb25lbnRcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWlkZW50aXRpZXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vaWRlbnRpdGllcy1wYWdlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaWRlbnRpdGllcy1wYWdlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgSWRlbnRpdGllc1BhZ2VDb21wb25lbnQgZXh0ZW5kcyBMaXN0UGFnZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICB0aXRsZSA9ICdJZGVudGl0aWVzJ1xuICB0YWJzOiB7IHVybDogc3RyaW5nLCBsYWJlbDogc3RyaW5nIH1bXSA7XG4gIGlzTG9hZGluZyA9IGZhbHNlO1xuICBmb3JtRGF0YUNoYW5nZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHB1YmxpYyBvdmVycmlkZSBzdmM6IElkZW50aXRpZXNQYWdlU2VydmljZSxcbiAgICAgIGZpbHRlclNlcnZpY2U6IERhdGFUYWJsZUZpbHRlclNlcnZpY2UsXG4gICAgICBkaWFsb2dGb3JtOiBNYXREaWFsb2csXG4gICAgICBwcml2YXRlIHRhYk5hbWVzOiBUYWJOYW1lU2VydmljZSxcbiAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICBjb25zb2xlRXZlbnRzOiBDb25zb2xlRXZlbnRzU2VydmljZSxcbiAgICAgIEBJbmplY3QoSURFTlRJVFlfRVhURU5TSU9OX1NFUlZJQ0UpIHByaXZhdGUgZXh0U2VydmljZTogRXh0ZW5zaW9uU2VydmljZSxcbiAgKSB7XG4gICAgc3VwZXIoZmlsdGVyU2VydmljZSwgc3ZjLCBjb25zb2xlRXZlbnRzLCBkaWFsb2dGb3JtLCBleHRTZXJ2aWNlKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25Jbml0KCkge1xuICAgIHRoaXMudGFicyA9IHRoaXMudGFiTmFtZXMuZ2V0VGFicygnaWRlbnRpdGllcycpO1xuICAgIHRoaXMuc3ZjLnJlZnJlc2hEYXRhID0gdGhpcy5yZWZyZXNoRGF0YTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKChldmVudDogYW55KSA9PiB7XG4gICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcbiAgICAgICAgICB0aGlzLnJlZnJlc2hEYXRhKCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnN2Yy5nZXRJZGVudGl0eVJvbGVBdHRyaWJ1dGVzKCk7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgfVxuXG4gIGhlYWRlckFjdGlvbkNsaWNrZWQoYWN0aW9uOiBzdHJpbmcpIHtcbiAgICBzd2l0Y2goYWN0aW9uKSB7XG4gICAgICBjYXNlICdhZGQnOlxuICAgICAgICB0aGlzLnN2Yy5vcGVuRWRpdEZvcm0oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlZGl0JzpcbiAgICAgICAgdGhpcy5zdmMub3BlblVwZGF0ZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2RlbGV0ZSc6XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSB0aGlzLnJvd0RhdGEuZmlsdGVyKChyb3cpID0+IHtcbiAgICAgICAgICByZXR1cm4gcm93LnNlbGVjdGVkO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBzZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDEgPyAnaWRlbnRpdGllcycgOiAnaWRlbnRpdHknO1xuICAgICAgICB0aGlzLm9wZW5CdWxrRGVsZXRlKHNlbGVjdGVkSXRlbXMsIGxhYmVsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgfVxuXG4gIGNsb3NlTW9kYWwoZXZlbnQ/KSB7XG4gICAgdGhpcy5zdmMuc2lkZU1vZGFsT3BlbiA9IGZhbHNlO1xuICAgIGlmKGV2ZW50Py5yZWZyZXNoKSB7XG4gICAgICB0aGlzLnJlZnJlc2hEYXRhKCk7XG4gICAgICB0aGlzLnN2Yy5nZXRJZGVudGl0eVJvbGVBdHRyaWJ1dGVzKCk7XG4gICAgfVxuICB9XG5cbiAgZGF0YUNoYW5nZWQoZXZlbnQpIHtcbiAgICB0aGlzLmZvcm1EYXRhQ2hhbmdlZCA9IGV2ZW50O1xuICB9XG5cbiAgdGFibGVBY3Rpb24oZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGV4dGVuc2lvbkFjdGlvbkZvdW5kID0gdGhpcy5oYW5kbGVFeHRlbnNpb25BY3Rpb25zKGV2ZW50KTtcbiAgICBpZiAoZXh0ZW5zaW9uQWN0aW9uRm91bmQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3dpdGNoKGV2ZW50Py5hY3Rpb24pIHtcbiAgICAgIGNhc2UgJ3RvZ2dsZUFsbCc6XG4gICAgICAgIHRoaXMuaXRlbVRvZ2dsZWQoZXZlbnQuaXRlbSk7XG4gICAgICAgIHRoaXMucm93RGF0YS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKGl0ZW0udHlwZUlkID09PSAnUm91dGVyJykge1xuICAgICAgICAgICAgaXRlbS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndG9nZ2xlSXRlbSc6XG4gICAgICAgIHRoaXMuaXRlbVRvZ2dsZWQoZXZlbnQuaXRlbSlcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd1cGRhdGUnOlxuICAgICAgICB0aGlzLnN2Yy5vcGVuRWRpdEZvcm0oZXZlbnQ/Lml0ZW0/LmlkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjcmVhdGUnOlxuICAgICAgICB0aGlzLnN2Yy5vcGVuRWRpdEZvcm0oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdvdmVycmlkZSc6XG4gICAgICAgIHRoaXMuc3ZjLm9wZW5PdmVycmlkZXNNb2RhbChldmVudC5pdGVtKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkZWxldGUnOlxuICAgICAgICB0aGlzLmRlbGV0ZUl0ZW0oZXZlbnQuaXRlbSlcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkb3dubG9hZC1lbnJvbGxtZW50JzpcbiAgICAgICAgdGhpcy5kb3dubG9hZEpXVChldmVudC5pdGVtKVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Jlc2V0LWVucm9sbG1lbnQnOlxuICAgICAgICB0aGlzLnJlc2V0RW5yb2xsbWVudChldmVudC5pdGVtKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZWlzc3VlLWVucm9sbG1lbnQnOlxuICAgICAgICB0aGlzLnJlaXNzdWVFbnJvbGxtZW50KGV2ZW50Lml0ZW0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJpZGVudGl0eS1zZXJ2aWNlLXBhdGhcIjpcbiAgICAgICAgdGhpcy5vcGVuSWRlbnRpdHlWaXN1YWxpemVyKGV2ZW50Lml0ZW0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJxci1jb2RlXCI6XG4gICAgICAgIHRoaXMuc2hvd1FSQ29kZShldmVudC5pdGVtKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkb3dubG9hZC1hbGwnOlxuICAgICAgICB0aGlzLmRvd25sb2FkQWxsSXRlbXMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkb3dubG9hZC1zZWxlY3RlZCc6XG4gICAgICAgIHRoaXMuc3ZjLmRvd25sb2FkSXRlbXModGhpcy5zZWxlY3RlZEl0ZW1zKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZXNldC1tZmEnOlxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuc3ZjLnJlc2V0TUZBKGV2ZW50Lml0ZW0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5yZWZyZXNoRGF0YSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBkb3dubG9hZEpXVChpdGVtOiBhbnkpIHtcbiAgICBjb25zdCBqd3QgPSB0aGlzLnN2Yy5nZXRKV1QoaXRlbSk7XG4gICAgdGhpcy5zdmMuZG93bmxvYWRKV1Qoand0LCBpdGVtLm5hbWUpO1xuICB9XG5cbiAgc2hvd1FSQ29kZShpdGVtOiBhbnkpIHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgand0OiB0aGlzLnN2Yy5nZXRKV1QoaXRlbSksXG4gICAgICBleHBpcmF0aW9uOiB0aGlzLnN2Yy5nZXRFbnJvbGxtZW50RXhwaXJhdGlvbihpdGVtKSxcbiAgICAgIHFyQ29kZVNpemU6IDQwMCxcbiAgICAgIGlkZW50aXR5OiBpdGVtLFxuICAgIH07XG4gICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ0Zvcm0ub3BlbihRckNvZGVDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IGRhdGEsXG4gICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgIH0pO1xuICB9XG5cbiAgZGVsZXRlSXRlbShpdGVtOiBhbnkpIHtcbiAgICB0aGlzLm9wZW5CdWxrRGVsZXRlKFtpdGVtXSwgJ2lkZW50aXR5Jyk7XG4gIH1cblxuICBvcGVuSWRlbnRpdHlWaXN1YWxpemVyKGlkZW50aXR5KSB7XG4gICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ0Zvcm0ub3BlbihJZGVudGl0eVNlcnZpY2VQYXRoQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIGlkZW50aXR5OiBpZGVudGl0eSxcbiAgICAgIH0sXG4gICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgIH0pO1xuICB9XG5cbiAgcmVzZXRFbnJvbGxtZW50KGlkZW50aXR5KSB7XG4gICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ0Zvcm0ub3BlbihSZXNldEVucm9sbG1lbnRDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgaWRlbnRpdHk6IGlkZW50aXR5LFxuICAgICAgICB0eXBlOiAncmVzZXQnLFxuICAgICAgfSxcbiAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgfSk7XG4gICAgdGhpcy5kaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYocmVzdWx0KSB7XG4gICAgICAgIHRoaXMucmVmcmVzaERhdGEodW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJlaXNzdWVFbnJvbGxtZW50KGlkZW50aXR5KSB7XG4gICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ0Zvcm0ub3BlbihSZXNldEVucm9sbG1lbnRDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgaWRlbnRpdHk6IGlkZW50aXR5LFxuICAgICAgICB0eXBlOiAncmVpc3N1ZScsXG4gICAgICB9LFxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICB9KTtcbiAgICB0aGlzLmRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZihyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoRGF0YSh1bmRlZmluZWQsIHRydWUpO1xuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpIHtcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICB9XG5cbiAgY2FuRGVhY3RpdmF0ZSgpIHtcbiAgICBpZiAodGhpcy5mb3JtRGF0YUNoYW5nZWQgJiYgdGhpcy5zdmMuc2lkZU1vZGFsT3Blbikge1xuICAgICAgcmV0dXJuIGNvbmZpcm0oJ1lvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gRG8geW91IHdhbnQgdG8gbGVhdmUgdGhpcyBwYWdlIGFuZCBkaXNjYXJkIHlvdXIgY2hhbmdlcyBvciBzdGF5IG9uIHRoaXMgcGFnZT8nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ6aXRpLXBhZ2UtY29udGFpbmVyIHppdGktaWRlbnRpdGllcy1jb250YWluZXJcIj5cbiAgICA8bGliLWxpc3QtcGFnZS1oZWFkZXIgW3RpdGxlXT1cInRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3RhYnNdPVwidGFic1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93QWRkXT1cIiFpdGVtc1NlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGFjdGlvbkNsaWNrZWQpPVwiaGVhZGVyQWN0aW9uQ2xpY2tlZCgkZXZlbnQpXCI+PC9saWItbGlzdC1wYWdlLWhlYWRlcj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbc2xvdD1saXN0LXBhZ2Utc3ViaGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgICA8bGliLWRhdGEtdGFibGUgW3RhYmxlSWRdPVwiJ2lkZW50aXRpZXMnXCJcbiAgICAgICAgICAgICAgICAgICAgW3Jvd0RhdGFdPVwicm93RGF0YVwiXG4gICAgICAgICAgICAgICAgICAgIFtpc0xvYWRpbmddPVwiaXNMb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbHVtbkRlZmluaXRpb25zXT1cImNvbHVtbkRlZnNcIlxuICAgICAgICAgICAgICAgICAgICAoYWN0aW9uUmVxdWVzdGVkKT1cInRhYmxlQWN0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbc3RhcnRDb3VudF09XCJzdGFydENvdW50XCJcbiAgICAgICAgICAgICAgICAgICAgW2VuZENvdW50XT1cImVuZENvdW50XCJcbiAgICAgICAgICAgICAgICAgICAgW3RvdGFsQ291bnRdPVwidG90YWxDb3VudFwiXG4gICAgICAgICAgICAgICAgICAgIFtjdXJyZW50UGFnZV09XCJmaWx0ZXJTZXJ2aWNlLmN1cnJlbnRQYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgW2VtcHR5TXNnXT1cIidObyBJZGVudGl0aWVzIGRlZmluZWQsIENsaWNrIHRoZSBwbHVzIHRvIGFkZCBhbiBJZGVudGl0eS4nXCJcbiAgICAgICAgICAgICAgICAgICAgW2ZpbHRlckFwcGxpZWRdPVwiZmlsdGVyQXBwbGllZFwiXG4gICAgICAgICAgICAgICAgICAgIFttZW51SXRlbXNdPVwic3ZjLm1lbnVJdGVtc1wiXG4gICAgICAgICAgICAgICAgICAgIFtoZWFkZXJBY3Rpb25zXT1cInN2Yy50YWJsZUhlYWRlckFjdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICBbbm9JdGVtc0ltYWdlXT1cIidOb19DbGllbnRzJ1wiXG4gICAgICAgICAgICAgICAgICAgIChncmlkUmVhZHkpPVwiZ3JpZFJlYWR5KCRldmVudClcIlxuICAgID5cbiAgICA8L2xpYi1kYXRhLXRhYmxlPlxuPC9kaXY+XG48bGliLXNpZGUtbW9kYWwgWyhvcGVuKV09XCJzdmMuc2lkZU1vZGFsT3BlblwiIFtzaG93Q2xvc2VdPVwiZmFsc2VcIj5cbiAgICA8bGliLW92ZXJyaWRlc1xuICAgICAgICAgICAgKm5nSWY9XCJzdmMubW9kYWxUeXBlID09PSAnb3ZlcnJpZGVzJyAmJiBzdmMuc2lkZU1vZGFsT3BlblwiXG4gICAgICAgICAgICBbaWRlbnRpdHldPVwic3ZjLnNlbGVjdGVkSWRlbnRpdHlcIlxuICAgICAgICAgICAgKGNsb3NlKT1cImNsb3NlTW9kYWwoJGV2ZW50KVwiXG4gICAgPjwvbGliLW92ZXJyaWRlcz5cbjwvbGliLXNpZGUtbW9kYWw+XG48bGliLWxvYWRpbmctaW5kaWNhdG9yICpuZ0lmPVwiaXNMb2FkaW5nXCIgW2lzTG9hZGluZ109XCJpc0xvYWRpbmdcIj48L2xpYi1sb2FkaW5nLWluZGljYXRvcj5cbiJdfQ==