@openziti/ziti-console-lib 1.0.3 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/styles/global.scss +70 -0
- package/fesm2022/openziti-ziti-console-lib.mjs +2133 -1321
- package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
- package/index.d.ts +5689 -6
- package/index.d.ts.map +1 -0
- package/package.json +10 -12
- package/esm2022/lib/ZAC_VERSION.mjs +0 -4
- package/esm2022/lib/app.initializer.mjs +0 -24
- package/esm2022/lib/default-app-config.mjs +0 -5
- package/esm2022/lib/features/card/card.component.mjs +0 -34
- package/esm2022/lib/features/card-list/card-list.component.mjs +0 -55
- package/esm2022/lib/features/config-editor/config-editor.component.mjs +0 -337
- package/esm2022/lib/features/confirm/confirm.component.mjs +0 -77
- package/esm2022/lib/features/creation-summary-dialog/creation-summary-dialog.component.mjs +0 -93
- package/esm2022/lib/features/custom-tags/custom-tags.component.mjs +0 -111
- package/esm2022/lib/features/data-table/cells/table-cell-menu/table-cell-menu.component.mjs +0 -46
- package/esm2022/lib/features/data-table/cells/table-cell-name/table-cell-name.component.mjs +0 -49
- package/esm2022/lib/features/data-table/cells/table-cell-select/table-cell-select.component.mjs +0 -58
- package/esm2022/lib/features/data-table/cells/table-cell-token/table-cell-token.component.mjs +0 -123
- package/esm2022/lib/features/data-table/column-headers/table-column-default/table-column-default.component.mjs +0 -268
- package/esm2022/lib/features/data-table/column-headers/table-column-filter/table-column-filter.component.mjs +0 -93
- package/esm2022/lib/features/data-table/column-headers/table-column-menu/table-column-menu.component.mjs +0 -37
- package/esm2022/lib/features/data-table/column-headers/table-column-select/table-column-select.component.mjs +0 -33
- package/esm2022/lib/features/data-table/data-table-filter.service.mjs +0 -138
- package/esm2022/lib/features/data-table/data-table.component.mjs +0 -918
- package/esm2022/lib/features/data-table/data-table.service.mjs +0 -98
- package/esm2022/lib/features/data-table/table-filter-bar/filter-bar.component.mjs +0 -108
- package/esm2022/lib/features/data-table/table-hidden-columns-bar/hidden-columns-bar.component.mjs +0 -26
- package/esm2022/lib/features/data-table/tooltips/os-tooltip.component.mjs +0 -29
- package/esm2022/lib/features/data-table/tooltips/sdk-tooltip.component.mjs +0 -34
- package/esm2022/lib/features/dynamic-widgets/boolean/boolean-toggle-input.component.mjs +0 -72
- package/esm2022/lib/features/dynamic-widgets/checkbox-list/checkbox-list-input.component.mjs +0 -134
- package/esm2022/lib/features/dynamic-widgets/forwarding-config/forwarding-config.component.mjs +0 -189
- package/esm2022/lib/features/dynamic-widgets/forwarding-config/forwarding-config.service.mjs +0 -50
- package/esm2022/lib/features/dynamic-widgets/number/number-input.component.mjs +0 -95
- package/esm2022/lib/features/dynamic-widgets/object/object.component.mjs +0 -121
- package/esm2022/lib/features/dynamic-widgets/password/password-input.component.mjs +0 -83
- package/esm2022/lib/features/dynamic-widgets/port-ranges/port-ranges.component.mjs +0 -100
- package/esm2022/lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component.mjs +0 -201
- package/esm2022/lib/features/dynamic-widgets/selector/selector-input.component.mjs +0 -166
- package/esm2022/lib/features/dynamic-widgets/string/string-input.component.mjs +0 -108
- package/esm2022/lib/features/dynamic-widgets/text-list/text-list-input.component.mjs +0 -126
- package/esm2022/lib/features/extendable/extendable.component.mjs +0 -55
- package/esm2022/lib/features/extendable/extensions-noop.service.mjs +0 -52
- package/esm2022/lib/features/header-bar/header-bar.component.mjs +0 -105
- package/esm2022/lib/features/json-view/json-view.component.mjs +0 -212
- package/esm2022/lib/features/list-page-features/list-page-form/list-page-form.component.mjs +0 -138
- package/esm2022/lib/features/list-page-features/list-page-header/list-page-header.component.mjs +0 -66
- package/esm2022/lib/features/loading-indicator/loading-indicator.component.mjs +0 -29
- package/esm2022/lib/features/login/login-dialog.component.mjs +0 -121
- package/esm2022/lib/features/messaging/growler.component.mjs +0 -62
- package/esm2022/lib/features/messaging/growler.model.mjs +0 -24
- package/esm2022/lib/features/messaging/growler.module.mjs +0 -34
- package/esm2022/lib/features/messaging/growler.service.mjs +0 -71
- package/esm2022/lib/features/messaging/logger.service.mjs +0 -174
- package/esm2022/lib/features/multi-action-button/multi-action-button.component.mjs +0 -30
- package/esm2022/lib/features/no-items/no-items.component.mjs +0 -46
- package/esm2022/lib/features/overrides/overrides.component.mjs +0 -118
- package/esm2022/lib/features/overrides/overrides.service.mjs +0 -114
- package/esm2022/lib/features/preview-list/preview-list.component.mjs +0 -151
- package/esm2022/lib/features/preview-selections/preview-selections.component.mjs +0 -114
- package/esm2022/lib/features/progress-meter/progress-meter.component.mjs +0 -43
- package/esm2022/lib/features/progress-wizard/progress-wizard.component.mjs +0 -90
- package/esm2022/lib/features/projectable-forms/api-session/api-session-form.component.mjs +0 -143
- package/esm2022/lib/features/projectable-forms/api-session/api-session-form.service.mjs +0 -118
- package/esm2022/lib/features/projectable-forms/auth-policy/auth-policy-form.component.mjs +0 -337
- package/esm2022/lib/features/projectable-forms/auth-policy/auth-policy-form.service.mjs +0 -114
- package/esm2022/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.mjs +0 -399
- package/esm2022/lib/features/projectable-forms/certificate-authority/certificate-authority-form.service.mjs +0 -95
- package/esm2022/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.mjs +0 -217
- package/esm2022/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.service.mjs +0 -54
- package/esm2022/lib/features/projectable-forms/config-type/config-type-form.component.mjs +0 -244
- package/esm2022/lib/features/projectable-forms/config-type/config-type-form.service.mjs +0 -92
- package/esm2022/lib/features/projectable-forms/configuration/configuration-form.component.mjs +0 -275
- package/esm2022/lib/features/projectable-forms/configuration/configuration.service.mjs +0 -137
- package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.component.mjs +0 -231
- package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.service.mjs +0 -118
- package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.mjs +0 -277
- package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.mjs +0 -188
- package/esm2022/lib/features/projectable-forms/form-field-container/form-field-container.component.mjs +0 -101
- package/esm2022/lib/features/projectable-forms/form-field-toggle/form-field-toggle.component.mjs +0 -54
- package/esm2022/lib/features/projectable-forms/form-header/form-header.component.mjs +0 -135
- package/esm2022/lib/features/projectable-forms/identity/identity-form.component.mjs +0 -471
- package/esm2022/lib/features/projectable-forms/identity/identity-form.service.mjs +0 -131
- package/esm2022/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.mjs +0 -533
- package/esm2022/lib/features/projectable-forms/jwt-signer/jwt-signer-form.service.mjs +0 -79
- package/esm2022/lib/features/projectable-forms/posture-check/posture-check-form.component.mjs +0 -437
- package/esm2022/lib/features/projectable-forms/posture-check/posture-check-form.service.mjs +0 -81
- package/esm2022/lib/features/projectable-forms/projectable-form.class.mjs +0 -315
- package/esm2022/lib/features/projectable-forms/service/service-form.component.mjs +0 -330
- package/esm2022/lib/features/projectable-forms/service/service-form.service.mjs +0 -591
- package/esm2022/lib/features/projectable-forms/service/simple-service/simple-service.component.mjs +0 -1036
- package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.mjs +0 -275
- package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.mjs +0 -172
- package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.component.mjs +0 -279
- package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.service.mjs +0 -230
- package/esm2022/lib/features/projectable-forms/session/session-form.component.mjs +0 -213
- package/esm2022/lib/features/projectable-forms/session/session-form.service.mjs +0 -84
- package/esm2022/lib/features/projectable-forms/terminator/terminator-form.component.mjs +0 -244
- package/esm2022/lib/features/projectable-forms/terminator/terminator-form.service.mjs +0 -130
- package/esm2022/lib/features/projectable-forms/transit-router/transit-router-form.component.mjs +0 -224
- package/esm2022/lib/features/projectable-forms/transit-router/transit-router-form.service.mjs +0 -118
- package/esm2022/lib/features/qr-code/qr-code.component.mjs +0 -166
- package/esm2022/lib/features/quick-add/quick-add.component.mjs +0 -50
- package/esm2022/lib/features/reset-enrollment/reset-enrollment.component.mjs +0 -86
- package/esm2022/lib/features/reset-enrollment/reset-enrollment.service.mjs +0 -61
- package/esm2022/lib/features/side-modal/side-modal.component.mjs +0 -45
- package/esm2022/lib/features/side-navigator/side-navigator.component.mjs +0 -127
- package/esm2022/lib/features/sidebars/side-navbar/side-navbar.component.mjs +0 -54
- package/esm2022/lib/features/tag-selector/tag-selector.component.mjs +0 -291
- package/esm2022/lib/features/visualizer/identity-service-path/identity-service-path.component.mjs +0 -586
- package/esm2022/lib/features/visualizer/identity-service-path/identity-service-path.helper.mjs +0 -373
- package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.component.mjs +0 -1706
- package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.helper.mjs +0 -591
- package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.treenodeprocessor.mjs +0 -883
- package/esm2022/lib/features/visualizer/visualizer-service.class.mjs +0 -32
- package/esm2022/lib/models/api-session.mjs +0 -7
- package/esm2022/lib/models/auth-policy.mjs +0 -31
- package/esm2022/lib/models/certificate-authority.mjs +0 -16
- package/esm2022/lib/models/config-type.mjs +0 -10
- package/esm2022/lib/models/config.mjs +0 -10
- package/esm2022/lib/models/edge-router-policy.mjs +0 -11
- package/esm2022/lib/models/edge-router.mjs +0 -13
- package/esm2022/lib/models/identity.mjs +0 -34
- package/esm2022/lib/models/jwt-signer.mjs +0 -20
- package/esm2022/lib/models/posture-check.mjs +0 -29
- package/esm2022/lib/models/service-edge-router-policy.mjs +0 -11
- package/esm2022/lib/models/service-policy.mjs +0 -13
- package/esm2022/lib/models/service.mjs +0 -12
- package/esm2022/lib/models/session.mjs +0 -7
- package/esm2022/lib/models/terminator.mjs +0 -14
- package/esm2022/lib/pages/api-sessions/api-sessions-page.component.mjs +0 -112
- package/esm2022/lib/pages/api-sessions/api-sessions-page.service.mjs +0 -235
- package/esm2022/lib/pages/attributes/attributes.component.mjs +0 -104
- package/esm2022/lib/pages/auth-policies/auth-policies-page.component.mjs +0 -120
- package/esm2022/lib/pages/auth-policies/auth-policies-page.service.mjs +0 -215
- package/esm2022/lib/pages/callback/callback.component.mjs +0 -155
- package/esm2022/lib/pages/certificate-authorities/certificate-authorities-page.component.mjs +0 -119
- package/esm2022/lib/pages/certificate-authorities/certificate-authorities-page.service.mjs +0 -240
- package/esm2022/lib/pages/config-types/config-types-page.component.mjs +0 -130
- package/esm2022/lib/pages/config-types/config-types-page.service.mjs +0 -134
- package/esm2022/lib/pages/configurations/configurations-page.component.mjs +0 -134
- package/esm2022/lib/pages/configurations/configurations-page.service.mjs +0 -251
- package/esm2022/lib/pages/edge-router-policies/edge-router-policies-page.component.mjs +0 -128
- package/esm2022/lib/pages/edge-router-policies/edge-router-policies-page.service.mjs +0 -407
- package/esm2022/lib/pages/edge-routers/edge-routers-page.component.mjs +0 -136
- package/esm2022/lib/pages/edge-routers/edge-routers-page.service.mjs +0 -354
- package/esm2022/lib/pages/geolocate/geolocate.component.mjs +0 -130
- package/esm2022/lib/pages/identities/identities-page.component.mjs +0 -221
- package/esm2022/lib/pages/identities/identities-page.service.mjs +0 -591
- package/esm2022/lib/pages/jwt-signers/jwt-signers-page.component.mjs +0 -160
- package/esm2022/lib/pages/jwt-signers/jwt-signers-page.service.mjs +0 -177
- package/esm2022/lib/pages/posture-checks/posture-checks-page.component.mjs +0 -103
- package/esm2022/lib/pages/posture-checks/posture-checks-page.service.mjs +0 -200
- package/esm2022/lib/pages/profile/profile.component.mjs +0 -58
- package/esm2022/lib/pages/service-edge-router-policies/service-edge-router-policies-page.component.mjs +0 -122
- package/esm2022/lib/pages/service-edge-router-policies/service-edge-router-policies-page.service.mjs +0 -367
- package/esm2022/lib/pages/service-policies/service-policies-page.component.mjs +0 -124
- package/esm2022/lib/pages/service-policies/service-policies-page.service.mjs +0 -446
- package/esm2022/lib/pages/services/services-page.component.mjs +0 -218
- package/esm2022/lib/pages/services/services-page.service.mjs +0 -378
- package/esm2022/lib/pages/sessions/sessions-page.component.mjs +0 -112
- package/esm2022/lib/pages/sessions/sessions-page.service.mjs +0 -228
- package/esm2022/lib/pages/settings/settings.component.mjs +0 -61
- package/esm2022/lib/pages/terminators/terminators-page.component.mjs +0 -97
- package/esm2022/lib/pages/terminators/terminators-page.service.mjs +0 -235
- package/esm2022/lib/pages/transit-routers/transit-routers-page.component.mjs +0 -129
- package/esm2022/lib/pages/transit-routers/transit-routers-page.service.mjs +0 -248
- package/esm2022/lib/safe.pipe.mjs +0 -18
- package/esm2022/lib/services/auth.service.mjs +0 -94
- package/esm2022/lib/services/console-events.service.mjs +0 -20
- package/esm2022/lib/services/csv-download.service.mjs +0 -91
- package/esm2022/lib/services/deactivate-guard.service.mjs +0 -17
- package/esm2022/lib/services/login-service.class.mjs +0 -47
- package/esm2022/lib/services/node-data.service.mjs +0 -397
- package/esm2022/lib/services/noop-login.service.mjs +0 -41
- package/esm2022/lib/services/schema.service.mjs +0 -807
- package/esm2022/lib/services/settings-service.class.mjs +0 -120
- package/esm2022/lib/services/settings.service.mjs +0 -203
- package/esm2022/lib/services/tab-name.service.mjs +0 -73
- package/esm2022/lib/services/validation.service.mjs +0 -156
- package/esm2022/lib/services/ziti-controller-data.service.mjs +0 -340
- package/esm2022/lib/services/ziti-data.service.mjs +0 -100
- package/esm2022/lib/services/ziti-domain-controller.service.mjs +0 -3
- package/esm2022/lib/shared/list-page-component.class.mjs +0 -186
- package/esm2022/lib/shared/list-page-service.class.mjs +0 -244
- package/esm2022/lib/urls.mjs +0 -34
- package/esm2022/lib/zac-routing.module.mjs +0 -34
- package/esm2022/lib/ziti-console-lib.module.mjs +0 -538
- package/esm2022/lib/ziti-console.constants.mjs +0 -20
- package/esm2022/openziti-ziti-console-lib.mjs +0 -5
- package/esm2022/public-api.mjs +0 -130
- package/lib/ZAC_VERSION.d.ts +0 -4
- package/lib/ZAC_VERSION.d.ts.map +0 -1
- package/lib/app.initializer.d.ts +0 -3
- package/lib/app.initializer.d.ts.map +0 -1
- package/lib/default-app-config.d.ts +0 -9
- package/lib/default-app-config.d.ts.map +0 -1
- package/lib/features/card/card.component.d.ts +0 -13
- package/lib/features/card/card.component.d.ts.map +0 -1
- package/lib/features/card-list/card-list.component.d.ts +0 -27
- package/lib/features/card-list/card-list.component.d.ts.map +0 -1
- package/lib/features/config-editor/config-editor.component.d.ts +0 -50
- package/lib/features/config-editor/config-editor.component.d.ts.map +0 -1
- package/lib/features/confirm/confirm.component.d.ts +0 -34
- package/lib/features/confirm/confirm.component.d.ts.map +0 -1
- package/lib/features/creation-summary-dialog/creation-summary-dialog.component.d.ts +0 -32
- package/lib/features/creation-summary-dialog/creation-summary-dialog.component.d.ts.map +0 -1
- package/lib/features/custom-tags/custom-tags.component.d.ts +0 -37
- package/lib/features/custom-tags/custom-tags.component.d.ts.map +0 -1
- package/lib/features/data-table/cells/table-cell-menu/table-cell-menu.component.d.ts +0 -16
- package/lib/features/data-table/cells/table-cell-menu/table-cell-menu.component.d.ts.map +0 -1
- package/lib/features/data-table/cells/table-cell-name/table-cell-name.component.d.ts +0 -20
- package/lib/features/data-table/cells/table-cell-name/table-cell-name.component.d.ts.map +0 -1
- package/lib/features/data-table/cells/table-cell-select/table-cell-select.component.d.ts +0 -15
- package/lib/features/data-table/cells/table-cell-select/table-cell-select.component.d.ts.map +0 -1
- package/lib/features/data-table/cells/table-cell-token/table-cell-token.component.d.ts +0 -22
- package/lib/features/data-table/cells/table-cell-token/table-cell-token.component.d.ts.map +0 -1
- package/lib/features/data-table/column-headers/table-column-default/table-column-default.component.d.ts +0 -52
- package/lib/features/data-table/column-headers/table-column-default/table-column-default.component.d.ts.map +0 -1
- package/lib/features/data-table/column-headers/table-column-filter/table-column-filter.component.d.ts +0 -27
- package/lib/features/data-table/column-headers/table-column-filter/table-column-filter.component.d.ts.map +0 -1
- package/lib/features/data-table/column-headers/table-column-menu/table-column-menu.component.d.ts +0 -19
- package/lib/features/data-table/column-headers/table-column-menu/table-column-menu.component.d.ts.map +0 -1
- package/lib/features/data-table/column-headers/table-column-select/table-column-select.component.d.ts +0 -15
- package/lib/features/data-table/column-headers/table-column-select/table-column-select.component.d.ts.map +0 -1
- package/lib/features/data-table/data-table-filter.service.d.ts +0 -37
- package/lib/features/data-table/data-table-filter.service.d.ts.map +0 -1
- package/lib/features/data-table/data-table.component.d.ts +0 -164
- package/lib/features/data-table/data-table.component.d.ts.map +0 -1
- package/lib/features/data-table/data-table.service.d.ts +0 -20
- package/lib/features/data-table/data-table.service.d.ts.map +0 -1
- package/lib/features/data-table/table-filter-bar/filter-bar.component.d.ts +0 -25
- package/lib/features/data-table/table-filter-bar/filter-bar.component.d.ts.map +0 -1
- package/lib/features/data-table/table-hidden-columns-bar/hidden-columns-bar.component.d.ts +0 -10
- package/lib/features/data-table/table-hidden-columns-bar/hidden-columns-bar.component.d.ts.map +0 -1
- package/lib/features/data-table/tooltips/os-tooltip.component.d.ts +0 -15
- package/lib/features/data-table/tooltips/os-tooltip.component.d.ts.map +0 -1
- package/lib/features/data-table/tooltips/sdk-tooltip.component.d.ts +0 -15
- package/lib/features/data-table/tooltips/sdk-tooltip.component.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/boolean/boolean-toggle-input.component.d.ts +0 -19
- package/lib/features/dynamic-widgets/boolean/boolean-toggle-input.component.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/checkbox-list/checkbox-list-input.component.d.ts +0 -28
- package/lib/features/dynamic-widgets/checkbox-list/checkbox-list-input.component.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/forwarding-config/forwarding-config.component.d.ts +0 -50
- package/lib/features/dynamic-widgets/forwarding-config/forwarding-config.component.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/forwarding-config/forwarding-config.service.d.ts +0 -14
- package/lib/features/dynamic-widgets/forwarding-config/forwarding-config.service.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/number/number-input.component.d.ts +0 -23
- package/lib/features/dynamic-widgets/number/number-input.component.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/object/object.component.d.ts +0 -26
- package/lib/features/dynamic-widgets/object/object.component.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/password/password-input.component.d.ts +0 -24
- package/lib/features/dynamic-widgets/password/password-input.component.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/port-ranges/port-ranges.component.d.ts +0 -22
- package/lib/features/dynamic-widgets/port-ranges/port-ranges.component.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component.d.ts +0 -60
- package/lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/selector/selector-input.component.d.ts +0 -30
- package/lib/features/dynamic-widgets/selector/selector-input.component.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/string/string-input.component.d.ts +0 -27
- package/lib/features/dynamic-widgets/string/string-input.component.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/text-list/text-list-input.component.d.ts +0 -26
- package/lib/features/dynamic-widgets/text-list/text-list-input.component.d.ts.map +0 -1
- package/lib/features/extendable/extendable.component.d.ts +0 -15
- package/lib/features/extendable/extendable.component.d.ts.map +0 -1
- package/lib/features/extendable/extensions-noop.service.d.ts +0 -35
- package/lib/features/extendable/extensions-noop.service.d.ts.map +0 -1
- package/lib/features/header-bar/header-bar.component.d.ts +0 -29
- package/lib/features/header-bar/header-bar.component.d.ts.map +0 -1
- package/lib/features/json-view/json-view.component.d.ts +0 -40
- package/lib/features/json-view/json-view.component.d.ts.map +0 -1
- package/lib/features/list-page-features/list-page-form/list-page-form.component.d.ts +0 -35
- package/lib/features/list-page-features/list-page-form/list-page-form.component.d.ts.map +0 -1
- package/lib/features/list-page-features/list-page-header/list-page-header.component.d.ts +0 -14
- package/lib/features/list-page-features/list-page-header/list-page-header.component.d.ts.map +0 -1
- package/lib/features/loading-indicator/loading-indicator.component.d.ts +0 -11
- package/lib/features/loading-indicator/loading-indicator.component.d.ts.map +0 -1
- package/lib/features/login/login-dialog.component.d.ts +0 -30
- package/lib/features/login/login-dialog.component.d.ts.map +0 -1
- package/lib/features/messaging/growler.component.d.ts +0 -19
- package/lib/features/messaging/growler.component.d.ts.map +0 -1
- package/lib/features/messaging/growler.model.d.ts +0 -8
- package/lib/features/messaging/growler.model.d.ts.map +0 -1
- package/lib/features/messaging/growler.module.d.ts +0 -10
- package/lib/features/messaging/growler.module.d.ts.map +0 -1
- package/lib/features/messaging/growler.service.d.ts +0 -18
- package/lib/features/messaging/growler.service.d.ts.map +0 -1
- package/lib/features/messaging/logger.service.d.ts +0 -27
- package/lib/features/messaging/logger.service.d.ts.map +0 -1
- package/lib/features/multi-action-button/multi-action-button.component.d.ts +0 -13
- package/lib/features/multi-action-button/multi-action-button.component.d.ts.map +0 -1
- package/lib/features/no-items/no-items.component.d.ts +0 -19
- package/lib/features/no-items/no-items.component.d.ts.map +0 -1
- package/lib/features/overrides/overrides.component.d.ts +0 -33
- package/lib/features/overrides/overrides.component.d.ts.map +0 -1
- package/lib/features/overrides/overrides.service.d.ts +0 -18
- package/lib/features/overrides/overrides.service.d.ts.map +0 -1
- package/lib/features/preview-list/preview-list.component.d.ts +0 -34
- package/lib/features/preview-list/preview-list.component.d.ts.map +0 -1
- package/lib/features/preview-selections/preview-selections.component.d.ts +0 -39
- package/lib/features/preview-selections/preview-selections.component.d.ts.map +0 -1
- package/lib/features/progress-meter/progress-meter.component.d.ts +0 -19
- package/lib/features/progress-meter/progress-meter.component.d.ts.map +0 -1
- package/lib/features/progress-wizard/progress-wizard.component.d.ts +0 -31
- package/lib/features/progress-wizard/progress-wizard.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/api-session/api-session-form.component.d.ts +0 -50
- package/lib/features/projectable-forms/api-session/api-session-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/api-session/api-session-form.service.d.ts +0 -27
- package/lib/features/projectable-forms/api-session/api-session-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/auth-policy/auth-policy-form.component.d.ts +0 -74
- package/lib/features/projectable-forms/auth-policy/auth-policy-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/auth-policy/auth-policy-form.service.d.ts +0 -38
- package/lib/features/projectable-forms/auth-policy/auth-policy-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.d.ts +0 -80
- package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.service.d.ts +0 -37
- package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.d.ts +0 -62
- package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.service.d.ts +0 -28
- package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/config-type/config-type-form.component.d.ts +0 -63
- package/lib/features/projectable-forms/config-type/config-type-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/config-type/config-type-form.service.d.ts +0 -27
- package/lib/features/projectable-forms/config-type/config-type-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts +0 -62
- package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/configuration/configuration.service.d.ts +0 -33
- package/lib/features/projectable-forms/configuration/configuration.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts +0 -53
- package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/edge-router/edge-router-form.service.d.ts +0 -29
- package/lib/features/projectable-forms/edge-router/edge-router-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts +0 -54
- package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.d.ts +0 -40
- package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/form-field-container/form-field-container.component.d.ts +0 -29
- package/lib/features/projectable-forms/form-field-container/form-field-container.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/form-field-toggle/form-field-toggle.component.d.ts +0 -15
- package/lib/features/projectable-forms/form-field-toggle/form-field-toggle.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/form-header/form-header.component.d.ts +0 -38
- package/lib/features/projectable-forms/form-header/form-header.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/identity/identity-form.component.d.ts +0 -93
- package/lib/features/projectable-forms/identity/identity-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/identity/identity-form.service.d.ts +0 -20
- package/lib/features/projectable-forms/identity/identity-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.d.ts +0 -97
- package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.service.d.ts +0 -21
- package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/posture-check/posture-check-form.component.d.ts +0 -134
- package/lib/features/projectable-forms/posture-check/posture-check-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/posture-check/posture-check-form.service.d.ts +0 -23
- package/lib/features/projectable-forms/posture-check/posture-check-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/projectable-form.class.d.ts +0 -92
- package/lib/features/projectable-forms/projectable-form.class.d.ts.map +0 -1
- package/lib/features/projectable-forms/service/service-form.component.d.ts +0 -70
- package/lib/features/projectable-forms/service/service-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/service/service-form.service.d.ts +0 -123
- package/lib/features/projectable-forms/service/service-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts +0 -173
- package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts +0 -53
- package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.d.ts +0 -38
- package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts +0 -55
- package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/service-policy/service-policy-form.service.d.ts +0 -48
- package/lib/features/projectable-forms/service-policy/service-policy-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/session/session-form.component.d.ts +0 -63
- package/lib/features/projectable-forms/session/session-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/session/session-form.service.d.ts +0 -23
- package/lib/features/projectable-forms/session/session-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/terminator/terminator-form.component.d.ts +0 -58
- package/lib/features/projectable-forms/terminator/terminator-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/terminator/terminator-form.service.d.ts +0 -33
- package/lib/features/projectable-forms/terminator/terminator-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/transit-router/transit-router-form.component.d.ts +0 -50
- package/lib/features/projectable-forms/transit-router/transit-router-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/transit-router/transit-router-form.service.d.ts +0 -27
- package/lib/features/projectable-forms/transit-router/transit-router-form.service.d.ts.map +0 -1
- package/lib/features/qr-code/qr-code.component.d.ts +0 -45
- package/lib/features/qr-code/qr-code.component.d.ts.map +0 -1
- package/lib/features/quick-add/quick-add.component.d.ts +0 -15
- package/lib/features/quick-add/quick-add.component.d.ts.map +0 -1
- package/lib/features/reset-enrollment/reset-enrollment.component.d.ts +0 -27
- package/lib/features/reset-enrollment/reset-enrollment.component.d.ts.map +0 -1
- package/lib/features/reset-enrollment/reset-enrollment.service.d.ts +0 -13
- package/lib/features/reset-enrollment/reset-enrollment.service.d.ts.map +0 -1
- package/lib/features/side-modal/side-modal.component.d.ts +0 -15
- package/lib/features/side-modal/side-modal.component.d.ts.map +0 -1
- package/lib/features/side-navigator/side-navigator.component.d.ts +0 -33
- package/lib/features/side-navigator/side-navigator.component.d.ts.map +0 -1
- package/lib/features/sidebars/side-navbar/side-navbar.component.d.ts +0 -16
- package/lib/features/sidebars/side-navbar/side-navbar.component.d.ts.map +0 -1
- package/lib/features/tag-selector/tag-selector.component.d.ts +0 -59
- package/lib/features/tag-selector/tag-selector.component.d.ts.map +0 -1
- package/lib/features/visualizer/identity-service-path/identity-service-path.component.d.ts +0 -54
- package/lib/features/visualizer/identity-service-path/identity-service-path.component.d.ts.map +0 -1
- package/lib/features/visualizer/identity-service-path/identity-service-path.helper.d.ts +0 -21
- package/lib/features/visualizer/identity-service-path/identity-service-path.helper.d.ts.map +0 -1
- package/lib/features/visualizer/network-visualizer/network-visualizer.component.d.ts +0 -146
- package/lib/features/visualizer/network-visualizer/network-visualizer.component.d.ts.map +0 -1
- package/lib/features/visualizer/network-visualizer/network-visualizer.helper.d.ts +0 -172
- package/lib/features/visualizer/network-visualizer/network-visualizer.helper.d.ts.map +0 -1
- package/lib/features/visualizer/network-visualizer/network-visualizer.treenodeprocessor.d.ts +0 -35
- package/lib/features/visualizer/network-visualizer/network-visualizer.treenodeprocessor.d.ts.map +0 -1
- package/lib/features/visualizer/visualizer-service.class.d.ts +0 -10
- package/lib/features/visualizer/visualizer-service.class.d.ts.map +0 -1
- package/lib/models/api-session.d.ts +0 -18
- package/lib/models/api-session.d.ts.map +0 -1
- package/lib/models/auth-policy.d.ts +0 -8
- package/lib/models/auth-policy.d.ts.map +0 -1
- package/lib/models/certificate-authority.d.ts +0 -14
- package/lib/models/certificate-authority.d.ts.map +0 -1
- package/lib/models/config-type.d.ts +0 -7
- package/lib/models/config-type.d.ts.map +0 -1
- package/lib/models/config.d.ts +0 -7
- package/lib/models/config.d.ts.map +0 -1
- package/lib/models/edge-router-policy.d.ts +0 -8
- package/lib/models/edge-router-policy.d.ts.map +0 -1
- package/lib/models/edge-router.d.ts +0 -10
- package/lib/models/edge-router.d.ts.map +0 -1
- package/lib/models/identity.d.ts +0 -16
- package/lib/models/identity.d.ts.map +0 -1
- package/lib/models/jwt-signer.d.ts +0 -17
- package/lib/models/jwt-signer.d.ts.map +0 -1
- package/lib/models/posture-check.d.ts +0 -17
- package/lib/models/posture-check.d.ts.map +0 -1
- package/lib/models/service-edge-router-policy.d.ts +0 -8
- package/lib/models/service-edge-router-policy.d.ts.map +0 -1
- package/lib/models/service-policy.d.ts +0 -10
- package/lib/models/service-policy.d.ts.map +0 -1
- package/lib/models/service.d.ts +0 -9
- package/lib/models/service.d.ts.map +0 -1
- package/lib/models/session.d.ts +0 -17
- package/lib/models/session.d.ts.map +0 -1
- package/lib/models/terminator.d.ts +0 -11
- package/lib/models/terminator.d.ts.map +0 -1
- package/lib/pages/api-sessions/api-sessions-page.component.d.ts +0 -30
- package/lib/pages/api-sessions/api-sessions-page.component.d.ts.map +0 -1
- package/lib/pages/api-sessions/api-sessions-page.service.d.ts +0 -31
- package/lib/pages/api-sessions/api-sessions-page.service.d.ts.map +0 -1
- package/lib/pages/attributes/attributes.component.d.ts +0 -31
- package/lib/pages/attributes/attributes.component.d.ts.map +0 -1
- package/lib/pages/auth-policies/auth-policies-page.component.d.ts +0 -29
- package/lib/pages/auth-policies/auth-policies-page.component.d.ts.map +0 -1
- package/lib/pages/auth-policies/auth-policies-page.service.d.ts +0 -34
- package/lib/pages/auth-policies/auth-policies-page.service.d.ts.map +0 -1
- package/lib/pages/callback/callback.component.d.ts +0 -22
- package/lib/pages/callback/callback.component.d.ts.map +0 -1
- package/lib/pages/certificate-authorities/certificate-authorities-page.component.d.ts +0 -30
- package/lib/pages/certificate-authorities/certificate-authorities-page.component.d.ts.map +0 -1
- package/lib/pages/certificate-authorities/certificate-authorities-page.service.d.ts +0 -35
- package/lib/pages/certificate-authorities/certificate-authorities-page.service.d.ts.map +0 -1
- package/lib/pages/config-types/config-types-page.component.d.ts +0 -31
- package/lib/pages/config-types/config-types-page.component.d.ts.map +0 -1
- package/lib/pages/config-types/config-types-page.service.d.ts +0 -29
- package/lib/pages/config-types/config-types-page.service.d.ts.map +0 -1
- package/lib/pages/configurations/configurations-page.component.d.ts +0 -30
- package/lib/pages/configurations/configurations-page.component.d.ts.map +0 -1
- package/lib/pages/configurations/configurations-page.service.d.ts +0 -80
- package/lib/pages/configurations/configurations-page.service.d.ts.map +0 -1
- package/lib/pages/edge-router-policies/edge-router-policies-page.component.d.ts +0 -33
- package/lib/pages/edge-router-policies/edge-router-policies-page.component.d.ts.map +0 -1
- package/lib/pages/edge-router-policies/edge-router-policies-page.service.d.ts +0 -63
- package/lib/pages/edge-router-policies/edge-router-policies-page.service.d.ts.map +0 -1
- package/lib/pages/edge-routers/edge-routers-page.component.d.ts +0 -36
- package/lib/pages/edge-routers/edge-routers-page.component.d.ts.map +0 -1
- package/lib/pages/edge-routers/edge-routers-page.service.d.ts +0 -51
- package/lib/pages/edge-routers/edge-routers-page.service.d.ts.map +0 -1
- package/lib/pages/geolocate/geolocate.component.d.ts +0 -32
- package/lib/pages/geolocate/geolocate.component.d.ts.map +0 -1
- package/lib/pages/identities/identities-page.component.d.ts +0 -40
- package/lib/pages/identities/identities-page.component.d.ts.map +0 -1
- package/lib/pages/identities/identities-page.service.d.ts +0 -64
- package/lib/pages/identities/identities-page.service.d.ts.map +0 -1
- package/lib/pages/jwt-signers/jwt-signers-page.component.d.ts +0 -34
- package/lib/pages/jwt-signers/jwt-signers-page.component.d.ts.map +0 -1
- package/lib/pages/jwt-signers/jwt-signers-page.service.d.ts +0 -31
- package/lib/pages/jwt-signers/jwt-signers-page.service.d.ts.map +0 -1
- package/lib/pages/posture-checks/posture-checks-page.component.d.ts +0 -29
- package/lib/pages/posture-checks/posture-checks-page.component.d.ts.map +0 -1
- package/lib/pages/posture-checks/posture-checks-page.service.d.ts +0 -28
- package/lib/pages/posture-checks/posture-checks-page.service.d.ts.map +0 -1
- package/lib/pages/profile/profile.component.d.ts +0 -17
- package/lib/pages/profile/profile.component.d.ts.map +0 -1
- package/lib/pages/service-edge-router-policies/service-edge-router-policies-page.component.d.ts +0 -33
- package/lib/pages/service-edge-router-policies/service-edge-router-policies-page.component.d.ts.map +0 -1
- package/lib/pages/service-edge-router-policies/service-edge-router-policies-page.service.d.ts +0 -57
- package/lib/pages/service-edge-router-policies/service-edge-router-policies-page.service.d.ts.map +0 -1
- package/lib/pages/service-policies/service-policies-page.component.d.ts +0 -34
- package/lib/pages/service-policies/service-policies-page.component.d.ts.map +0 -1
- package/lib/pages/service-policies/service-policies-page.service.d.ts +0 -63
- package/lib/pages/service-policies/service-policies-page.service.d.ts.map +0 -1
- package/lib/pages/services/services-page.component.d.ts +0 -42
- package/lib/pages/services/services-page.component.d.ts.map +0 -1
- package/lib/pages/services/services-page.service.d.ts +0 -69
- package/lib/pages/services/services-page.service.d.ts.map +0 -1
- package/lib/pages/sessions/sessions-page.component.d.ts +0 -30
- package/lib/pages/sessions/sessions-page.component.d.ts.map +0 -1
- package/lib/pages/sessions/sessions-page.service.d.ts +0 -30
- package/lib/pages/sessions/sessions-page.service.d.ts.map +0 -1
- package/lib/pages/settings/settings.component.d.ts +0 -23
- package/lib/pages/settings/settings.component.d.ts.map +0 -1
- package/lib/pages/terminators/terminators-page.component.d.ts +0 -29
- package/lib/pages/terminators/terminators-page.component.d.ts.map +0 -1
- package/lib/pages/terminators/terminators-page.service.d.ts +0 -32
- package/lib/pages/terminators/terminators-page.service.d.ts.map +0 -1
- package/lib/pages/transit-routers/transit-routers-page.component.d.ts +0 -35
- package/lib/pages/transit-routers/transit-routers-page.component.d.ts.map +0 -1
- package/lib/pages/transit-routers/transit-routers-page.service.d.ts +0 -50
- package/lib/pages/transit-routers/transit-routers-page.service.d.ts.map +0 -1
- package/lib/safe.pipe.d.ts +0 -11
- package/lib/safe.pipe.d.ts.map +0 -1
- package/lib/services/auth.service.d.ts +0 -21
- package/lib/services/auth.service.d.ts.map +0 -1
- package/lib/services/console-events.service.d.ts +0 -12
- package/lib/services/console-events.service.d.ts.map +0 -1
- package/lib/services/csv-download.service.d.ts +0 -11
- package/lib/services/csv-download.service.d.ts.map +0 -1
- package/lib/services/deactivate-guard.service.d.ts +0 -14
- package/lib/services/deactivate-guard.service.d.ts.map +0 -1
- package/lib/services/login-service.class.d.ts +0 -30
- package/lib/services/login-service.class.d.ts.map +0 -1
- package/lib/services/node-data.service.d.ts +0 -38
- package/lib/services/node-data.service.d.ts.map +0 -1
- package/lib/services/noop-login.service.d.ts +0 -22
- package/lib/services/noop-login.service.d.ts.map +0 -1
- package/lib/services/schema.service.d.ts +0 -63
- package/lib/services/schema.service.d.ts.map +0 -1
- package/lib/services/settings-service.class.d.ts +0 -36
- package/lib/services/settings-service.class.d.ts.map +0 -1
- package/lib/services/settings.service.d.ts +0 -20
- package/lib/services/settings.service.d.ts.map +0 -1
- package/lib/services/tab-name.service.d.ts +0 -20
- package/lib/services/tab-name.service.d.ts.map +0 -1
- package/lib/services/validation.service.d.ts +0 -20
- package/lib/services/validation.service.d.ts.map +0 -1
- package/lib/services/ziti-controller-data.service.d.ts +0 -36
- package/lib/services/ziti-controller-data.service.d.ts.map +0 -1
- package/lib/services/ziti-data.service.d.ts +0 -49
- package/lib/services/ziti-data.service.d.ts.map +0 -1
- package/lib/services/ziti-domain-controller.service.d.ts +0 -13
- package/lib/services/ziti-domain-controller.service.d.ts.map +0 -1
- package/lib/shared/list-page-component.class.d.ts +0 -57
- package/lib/shared/list-page-component.class.d.ts.map +0 -1
- package/lib/shared/list-page-service.class.d.ts +0 -81
- package/lib/shared/list-page-service.class.d.ts.map +0 -1
- package/lib/urls.d.ts +0 -34
- package/lib/urls.d.ts.map +0 -1
- package/lib/zac-routing.module.d.ts +0 -8
- package/lib/zac-routing.module.d.ts.map +0 -1
- package/lib/ziti-console-lib.module.d.ts +0 -121
- package/lib/ziti-console-lib.module.d.ts.map +0 -1
- package/lib/ziti-console.constants.d.ts +0 -5
- package/lib/ziti-console.constants.d.ts.map +0 -1
- package/openziti-ziti-console-lib.d.ts.map +0 -1
- package/public-api.d.ts +0 -127
- package/public-api.d.ts.map +0 -1
package/esm2022/lib/features/visualizer/identity-service-path/identity-service-path.component.mjs
DELETED
|
@@ -1,586 +0,0 @@
|
|
|
1
|
-
/* eslint prefer-const: 1 */
|
|
2
|
-
import { Component, Inject, } from '@angular/core';
|
|
3
|
-
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
4
|
-
import { SETTINGS_SERVICE, } from '../../../services/settings.service';
|
|
5
|
-
import { ZITI_DATA_SERVICE, } from '../../../services/ziti-data.service';
|
|
6
|
-
import * as d3 from 'd3';
|
|
7
|
-
import _ from 'lodash';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "./identity-service-path.helper";
|
|
10
|
-
import * as i2 from "@angular/router";
|
|
11
|
-
import * as i3 from "@angular/material/dialog";
|
|
12
|
-
import * as i4 from "@angular/common";
|
|
13
|
-
import * as i5 from "@angular/forms";
|
|
14
|
-
import * as i6 from "@angular/material/autocomplete";
|
|
15
|
-
import * as i7 from "@angular/material/core";
|
|
16
|
-
import * as i8 from "../../loading-indicator/loading-indicator.component";
|
|
17
|
-
import * as i9 from "../../../services/settings.service";
|
|
18
|
-
import * as i10 from "../../../services/ziti-data.service";
|
|
19
|
-
export class IdentityServicePathComponent {
|
|
20
|
-
constructor(identityServicePathHelper, settingsService, zitiService, router, dialogRef, data) {
|
|
21
|
-
this.identityServicePathHelper = identityServicePathHelper;
|
|
22
|
-
this.settingsService = settingsService;
|
|
23
|
-
this.zitiService = zitiService;
|
|
24
|
-
this.router = router;
|
|
25
|
-
this.dialogRef = dialogRef;
|
|
26
|
-
this.data = data;
|
|
27
|
-
this.isDarkMode = false;
|
|
28
|
-
this.refreshRotate = false;
|
|
29
|
-
this.closeRotate = true;
|
|
30
|
-
this.filterText = 'fetching services..';
|
|
31
|
-
this.noSearchResults = false;
|
|
32
|
-
this.autocompleteOptions = [];
|
|
33
|
-
this.fullScreen = false;
|
|
34
|
-
this.endpoints = [];
|
|
35
|
-
this.selectedService = '';
|
|
36
|
-
this.doEndpointHasAppwans = false;
|
|
37
|
-
this.doEndpointHasPublicRouters = false;
|
|
38
|
-
this.doEndpointHasServicesInPrivateNw = false;
|
|
39
|
-
this.isLoading = false;
|
|
40
|
-
this.countGrp2Nds = 0;
|
|
41
|
-
this.countGrp3Nds = 0;
|
|
42
|
-
this.endpointData = data.identity;
|
|
43
|
-
}
|
|
44
|
-
ngOnInit() {
|
|
45
|
-
this.getEndpointNetworkAsCode();
|
|
46
|
-
this.autocompleteOptions = [];
|
|
47
|
-
this.isLoading = true;
|
|
48
|
-
const bgCol = d3.color(d3.select('body').style("background-color")).formatHex();
|
|
49
|
-
this.isDarkMode = bgCol == '#18191d' ? true : false;
|
|
50
|
-
}
|
|
51
|
-
getEndpointNetworkAsCode() {
|
|
52
|
-
const pagesize = 500;
|
|
53
|
-
const services_paging = {
|
|
54
|
-
searchOn: 'name',
|
|
55
|
-
filter: '',
|
|
56
|
-
total: pagesize,
|
|
57
|
-
page: 1,
|
|
58
|
-
sort: 'name',
|
|
59
|
-
order: 'asc',
|
|
60
|
-
};
|
|
61
|
-
this.zitiService
|
|
62
|
-
.get(`identities/${this.endpointData.id}/services`, services_paging, [])
|
|
63
|
-
.then((result) => {
|
|
64
|
-
this.services = result.data;
|
|
65
|
-
this.closeRotate = false;
|
|
66
|
-
if (!this.services || this.services.length === 0) {
|
|
67
|
-
this.services = [];
|
|
68
|
-
this.serviceOptions = [];
|
|
69
|
-
this.serviceOptions.push(noServices());
|
|
70
|
-
this.selectedService = 'Services not found for a selected identity';
|
|
71
|
-
this.isLoading = false;
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
const pages = Math.ceil(result.meta.pagination.totalCount / pagesize);
|
|
75
|
-
const promises = [];
|
|
76
|
-
for (let page = 2; page <= pages; page++) {
|
|
77
|
-
services_paging.page = page;
|
|
78
|
-
const tmp_promise = this.zitiService
|
|
79
|
-
.get(`identities/${this.endpointData.id}/services`, services_paging, [])
|
|
80
|
-
.then((pageResult) => {
|
|
81
|
-
pageResult.data.forEach((serv) => {
|
|
82
|
-
this.services.push(serv);
|
|
83
|
-
});
|
|
84
|
-
});
|
|
85
|
-
promises.push(tmp_promise);
|
|
86
|
-
}
|
|
87
|
-
Promise.all(promises).then(() => {
|
|
88
|
-
this.zitiService
|
|
89
|
-
.get(`identities/${this.endpointData.id}/edge-routers`, {}, [])
|
|
90
|
-
.then((result) => {
|
|
91
|
-
this.edgerouters = [];
|
|
92
|
-
result.data.forEach((rec) => {
|
|
93
|
-
this.edgerouters.push(rec);
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
this.serviceOptions = createServiceOptions(this.services);
|
|
97
|
-
this.filterText =
|
|
98
|
-
this.serviceOptions.length === 0
|
|
99
|
-
? ''
|
|
100
|
-
: this.serviceOptions[0].name;
|
|
101
|
-
this.selectedService =
|
|
102
|
-
this.serviceOptions.length === 0
|
|
103
|
-
? 'Services not found for a selected identity'
|
|
104
|
-
: this.serviceOptions[0].name;
|
|
105
|
-
this.autocompleteOptions = this.serviceOptions;
|
|
106
|
-
this.serviceChanged();
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
});
|
|
110
|
-
function createServiceOptions(_services) {
|
|
111
|
-
const options = [];
|
|
112
|
-
const serviceNames = [];
|
|
113
|
-
_services?.find((srvice) => {
|
|
114
|
-
if (!serviceNames.includes(srvice.name)) {
|
|
115
|
-
serviceNames.push(srvice.name);
|
|
116
|
-
const sd = new ServiceData();
|
|
117
|
-
sd.id = srvice.id;
|
|
118
|
-
sd.name = srvice.name;
|
|
119
|
-
options.push(sd);
|
|
120
|
-
}
|
|
121
|
-
});
|
|
122
|
-
return options;
|
|
123
|
-
}
|
|
124
|
-
function noServices() {
|
|
125
|
-
const sd = new ServiceData();
|
|
126
|
-
sd.id = '';
|
|
127
|
-
sd.name = 'NO SERVICES';
|
|
128
|
-
return sd;
|
|
129
|
-
}
|
|
130
|
-
} // end of getEndpointNetworkAsCode
|
|
131
|
-
filterSearchArray() {
|
|
132
|
-
this.autocompleteOptions = [];
|
|
133
|
-
this.autocompleteOptions = this.serviceOptions.filter((option) => option.name.toLowerCase().includes(this.selectedService.toLowerCase()));
|
|
134
|
-
}
|
|
135
|
-
clearSearchFilter() {
|
|
136
|
-
this.filterText = 'You can filter services by typing here';
|
|
137
|
-
this.autocompleteOptions = this.serviceOptions;
|
|
138
|
-
this.selectedService = '';
|
|
139
|
-
}
|
|
140
|
-
autocompleteSearch(event) {
|
|
141
|
-
this.serviceChanged();
|
|
142
|
-
}
|
|
143
|
-
serviceChanged() {
|
|
144
|
-
this.isLoading = true;
|
|
145
|
-
const allPromises = [];
|
|
146
|
-
let serviceOb = null;
|
|
147
|
-
let service_configs = [];
|
|
148
|
-
serviceOb = this.services && this.services.find((rec) => {
|
|
149
|
-
return (rec.name === this.selectedService);
|
|
150
|
-
});
|
|
151
|
-
if (!serviceOb) {
|
|
152
|
-
this.isLoading = false;
|
|
153
|
-
return;
|
|
154
|
-
}
|
|
155
|
-
const configs_url = this.getLinkForResource(serviceOb, 'configs');
|
|
156
|
-
const configPromise = this.zitiService
|
|
157
|
-
.get(configs_url, {}, [])
|
|
158
|
-
.then((configs) => {
|
|
159
|
-
service_configs = configs && configs.data ? configs.data : [];
|
|
160
|
-
});
|
|
161
|
-
const service_edge_router_policies_url = this.getLinkForResource(serviceOb, 'service-edge-router-policies');
|
|
162
|
-
const service_policies_url = this.getLinkForResource(serviceOb, 'service-policies').replace('./', ''); // dial, Bind info
|
|
163
|
-
let bindPolicies = [];
|
|
164
|
-
let bindIdnetities = [];
|
|
165
|
-
const promise2 = this.zitiService
|
|
166
|
-
.get(service_policies_url, {}, [])
|
|
167
|
-
.then((policies) => {
|
|
168
|
-
const identityPromises = [];
|
|
169
|
-
_.isArray(policies.data) && policies.data.forEach((policy) => {
|
|
170
|
-
if (policy.type === 'Bind') {
|
|
171
|
-
const bindIdentitiesUrl = this.getLinkForResource(policy, 'identities');
|
|
172
|
-
const promse = this.zitiService
|
|
173
|
-
.get(bindIdentitiesUrl.replace('./', ''), {}, [])
|
|
174
|
-
.then((res) => {
|
|
175
|
-
if (res && res.data.length > 0) {
|
|
176
|
-
res.data.forEach((rs) => {
|
|
177
|
-
this.addItemToArray(bindIdnetities, rs);
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
else {
|
|
181
|
-
this.addItemToArray(bindIdnetities, res.data);
|
|
182
|
-
}
|
|
183
|
-
});
|
|
184
|
-
identityPromises.push(promse);
|
|
185
|
-
}
|
|
186
|
-
});
|
|
187
|
-
Promise.all(identityPromises).then(() => {
|
|
188
|
-
this.startVisProcess(bindIdnetities, serviceOb, service_configs);
|
|
189
|
-
this.isLoading = false;
|
|
190
|
-
});
|
|
191
|
-
});
|
|
192
|
-
}
|
|
193
|
-
addItemToArray(bindIdnetities, ob) {
|
|
194
|
-
if (!bindIdnetities.find((item) => item.id === ob.id)) {
|
|
195
|
-
bindIdnetities.push(ob);
|
|
196
|
-
}
|
|
197
|
-
return bindIdnetities;
|
|
198
|
-
}
|
|
199
|
-
getLinkForResource(ob, resource) {
|
|
200
|
-
return ob['_links'][resource]['href'];
|
|
201
|
-
}
|
|
202
|
-
startVisProcess(bindIdnetities, selectedServiceOb, serviceConfigs) {
|
|
203
|
-
this.countGrp2Nds = 0;
|
|
204
|
-
this.countGrp3Nds = 0;
|
|
205
|
-
if (_.isEmpty(this.selectedService)) {
|
|
206
|
-
this.serviceSelectError = !_.isEmpty(this.selectedService);
|
|
207
|
-
return;
|
|
208
|
-
}
|
|
209
|
-
try {
|
|
210
|
-
this.graphJsonObj = this.identityServicePathHelper.getEndpointGraphObj(this.endpointData, bindIdnetities, this.edgerouters, selectedServiceOb, serviceConfigs);
|
|
211
|
-
}
|
|
212
|
-
catch (err) {
|
|
213
|
-
return;
|
|
214
|
-
}
|
|
215
|
-
let countGrp1Nds = 0;
|
|
216
|
-
this.doEndpointHasServicesInPrivateNw = false;
|
|
217
|
-
this.doEndpointHasPublicRouters = false;
|
|
218
|
-
this.doEndpointHasAppwans = false;
|
|
219
|
-
this.graphJsonObj.nodes.forEach((nd) => {
|
|
220
|
-
if (nd.group === '3') {
|
|
221
|
-
this.countGrp3Nds++;
|
|
222
|
-
}
|
|
223
|
-
if (nd.group.includes('2')) {
|
|
224
|
-
this.countGrp2Nds++;
|
|
225
|
-
}
|
|
226
|
-
if (nd.group === '1') {
|
|
227
|
-
countGrp1Nds++;
|
|
228
|
-
}
|
|
229
|
-
});
|
|
230
|
-
if (this.countGrp3Nds > 0) {
|
|
231
|
-
this.doEndpointHasServicesInPrivateNw = true; // show private/customer network box, will be decided with this variable.
|
|
232
|
-
}
|
|
233
|
-
if (this.countGrp2Nds > 0) {
|
|
234
|
-
this.doEndpointHasPublicRouters = true; // show public network box, will be decided with this variable.
|
|
235
|
-
}
|
|
236
|
-
if (countGrp1Nds > 0) {
|
|
237
|
-
this.doEndpointHasAppwans = true; // show private network box, will be decided with this variable.
|
|
238
|
-
}
|
|
239
|
-
this.initTopoView();
|
|
240
|
-
}
|
|
241
|
-
toggleModalSize() {
|
|
242
|
-
this.fullScreen = !this.fullScreen;
|
|
243
|
-
}
|
|
244
|
-
hide() {
|
|
245
|
-
this.dialogRef.close();
|
|
246
|
-
}
|
|
247
|
-
initTopoView() {
|
|
248
|
-
const margin = { top: 10, right: 90, bottom: 30, left: 0 };
|
|
249
|
-
const width = 1100 - margin.left - margin.right;
|
|
250
|
-
const height = 1100 - margin.top - margin.bottom;
|
|
251
|
-
const colors = d3.scaleOrdinal(d3.schemeCategory10);
|
|
252
|
-
const tooltip = d3.select('#epTooltip');
|
|
253
|
-
let svg = d3.select('#IdentityTopology'), node, link;
|
|
254
|
-
const handleZoom = (e) => svg.attr('transform', e.transform);
|
|
255
|
-
const zoom = d3.zoom().on('zoom', handleZoom);
|
|
256
|
-
svg
|
|
257
|
-
.attr('width', '100%')
|
|
258
|
-
.attr('height', '100%')
|
|
259
|
-
// .call(zoom)
|
|
260
|
-
.attr('viewBox', '0 ' + -10 + ' ' + width + ' ' + height)
|
|
261
|
-
.append('g')
|
|
262
|
-
.attr('transform', 'translate(' + -300 + ',' + 225 + ')');
|
|
263
|
-
svg.selectAll('g').remove();
|
|
264
|
-
const simulation = d3
|
|
265
|
-
.forceSimulation()
|
|
266
|
-
.force('link', d3
|
|
267
|
-
.forceLink()
|
|
268
|
-
.id(function (d) {
|
|
269
|
-
return d.id;
|
|
270
|
-
})
|
|
271
|
-
.distance(100)
|
|
272
|
-
.strength(1))
|
|
273
|
-
.force('charge', d3.forceManyBody())
|
|
274
|
-
.force('center', d3.forceCenter(width / 2, height / 2));
|
|
275
|
-
const links = this.graphJsonObj.links;
|
|
276
|
-
const nodes = this.graphJsonObj.nodes;
|
|
277
|
-
link = svg
|
|
278
|
-
.selectAll('g.line.line')
|
|
279
|
-
.data(links)
|
|
280
|
-
.enter()
|
|
281
|
-
.append('g')
|
|
282
|
-
.attr('class', 'link')
|
|
283
|
-
.attr('marker-end', 'url(#arrowhead)');
|
|
284
|
-
link
|
|
285
|
-
.append('line')
|
|
286
|
-
.style('stroke-width', function (d) {
|
|
287
|
-
if (d.status === 1 || d.status === -1) {
|
|
288
|
-
return 1.5; //Math.sqrt(d.weight);
|
|
289
|
-
}
|
|
290
|
-
else {
|
|
291
|
-
return 1;
|
|
292
|
-
}
|
|
293
|
-
})
|
|
294
|
-
.style('stroke', function (d) {
|
|
295
|
-
if (d.status === 1) {
|
|
296
|
-
let doInUsage = false;
|
|
297
|
-
return '#00cd13';
|
|
298
|
-
}
|
|
299
|
-
else if (d.status === -1) {
|
|
300
|
-
return '#d8dce7';
|
|
301
|
-
}
|
|
302
|
-
else {
|
|
303
|
-
return '#ff004e';
|
|
304
|
-
}
|
|
305
|
-
});
|
|
306
|
-
link.each(function (d, i) {
|
|
307
|
-
const _this = d3.select(this);
|
|
308
|
-
if (d.status === 1) {
|
|
309
|
-
let doInUsage = true;
|
|
310
|
-
_this
|
|
311
|
-
.append('text')
|
|
312
|
-
.style('fill', 'rgb(255,198,22)')
|
|
313
|
-
.style('font-size', '11');
|
|
314
|
-
_this
|
|
315
|
-
.append('rect')
|
|
316
|
-
.attr('fill', function (d) {
|
|
317
|
-
return 'white';
|
|
318
|
-
})
|
|
319
|
-
.attr('width', function (d) {
|
|
320
|
-
if (doInUsage) {
|
|
321
|
-
return 3;
|
|
322
|
-
}
|
|
323
|
-
else {
|
|
324
|
-
return 0.1;
|
|
325
|
-
}
|
|
326
|
-
})
|
|
327
|
-
.attr('height', function (d) {
|
|
328
|
-
if (doInUsage) {
|
|
329
|
-
return 3;
|
|
330
|
-
}
|
|
331
|
-
else {
|
|
332
|
-
return 0.1;
|
|
333
|
-
}
|
|
334
|
-
})
|
|
335
|
-
.append('animate');
|
|
336
|
-
_this.select('rect').append('animate');
|
|
337
|
-
}
|
|
338
|
-
else if (d.status === 0) {
|
|
339
|
-
_this
|
|
340
|
-
.append('image')
|
|
341
|
-
.attr('xlink:href', function () {
|
|
342
|
-
return '/assets/images/visualizer/link-cut.png';
|
|
343
|
-
})
|
|
344
|
-
.attr('width', '20')
|
|
345
|
-
.attr('height', '24');
|
|
346
|
-
}
|
|
347
|
-
});
|
|
348
|
-
node = svg
|
|
349
|
-
.selectAll('.node')
|
|
350
|
-
.data(nodes)
|
|
351
|
-
.enter()
|
|
352
|
-
.append('g')
|
|
353
|
-
.attr('class', 'node');
|
|
354
|
-
node
|
|
355
|
-
.append('image')
|
|
356
|
-
.attr('xlink:href', function (d) {
|
|
357
|
-
const routerImagePath = '/assets/images/visualizer/Routers.png';
|
|
358
|
-
const nonProvisionedRouterImagePath = '/assets/images/visualizer/ER.png';
|
|
359
|
-
const errRouterImagePath = '/assets/images/visualizer/error_er.png';
|
|
360
|
-
const errEndpointImagePath = '/assets/images/visualizer/host-error.png';
|
|
361
|
-
const unregisteredEndpointImagePath = '/assets/images/visualizer/host_unregistered.png';
|
|
362
|
-
const endPointPath = '/assets/images/visualizer/host.png';
|
|
363
|
-
if (d.type.includes('Identity') && d.status === 'Un-Registered') {
|
|
364
|
-
return unregisteredEndpointImagePath;
|
|
365
|
-
}
|
|
366
|
-
else if (d.type.includes('Identity') &&
|
|
367
|
-
d.apiSession === 'Yes' &&
|
|
368
|
-
d.status === 'Registered') {
|
|
369
|
-
return endPointPath;
|
|
370
|
-
}
|
|
371
|
-
else if (d.type.includes('Identity') &&
|
|
372
|
-
(d.routerConnection === 'No' || d.apiSession === 'No')) {
|
|
373
|
-
return errEndpointImagePath;
|
|
374
|
-
}
|
|
375
|
-
else if (d.type.includes('Identity')) {
|
|
376
|
-
return endPointPath;
|
|
377
|
-
}
|
|
378
|
-
else if (d.type.includes('Router') &&
|
|
379
|
-
(d.status === 'ERROR' || d.online === 'No')) {
|
|
380
|
-
return errRouterImagePath;
|
|
381
|
-
}
|
|
382
|
-
else if (d.type.includes('Router') && d.status === 'PROVISIONED') {
|
|
383
|
-
return routerImagePath;
|
|
384
|
-
}
|
|
385
|
-
else if (d.type.includes('Router')) {
|
|
386
|
-
return nonProvisionedRouterImagePath;
|
|
387
|
-
}
|
|
388
|
-
if (d.group === '4') {
|
|
389
|
-
return '/assets/images/visualizer/service.png';
|
|
390
|
-
}
|
|
391
|
-
else {
|
|
392
|
-
return '';
|
|
393
|
-
}
|
|
394
|
-
})
|
|
395
|
-
.attr('x', -25)
|
|
396
|
-
.attr('y', -25)
|
|
397
|
-
.attr('width', '40')
|
|
398
|
-
.attr('height', '40');
|
|
399
|
-
node
|
|
400
|
-
.append('text')
|
|
401
|
-
.attr('x', 10)
|
|
402
|
-
.attr('y', 12)
|
|
403
|
-
.attr('fill', 'var(--tableText)')
|
|
404
|
-
.text(function (d) {
|
|
405
|
-
return d.name;
|
|
406
|
-
});
|
|
407
|
-
simulation.nodes(nodes).on('tick', ticked);
|
|
408
|
-
simulation.force('link').links(links);
|
|
409
|
-
node.on('mouseover', (event, d) => {
|
|
410
|
-
const endpointUtlizationJson = {};
|
|
411
|
-
drawTooltip(event, d, endpointUtlizationJson);
|
|
412
|
-
});
|
|
413
|
-
node.on('mouseout', function () {
|
|
414
|
-
removeTooltip();
|
|
415
|
-
});
|
|
416
|
-
function ticked() {
|
|
417
|
-
node.attr('transform', function (d) {
|
|
418
|
-
return 'translate(' + d.posx + ',' + d.posy + ')';
|
|
419
|
-
});
|
|
420
|
-
link
|
|
421
|
-
.select('line')
|
|
422
|
-
.attr('x1', function (d) {
|
|
423
|
-
return d.source.posx;
|
|
424
|
-
})
|
|
425
|
-
.attr('y1', function (d) {
|
|
426
|
-
return d.source.posy;
|
|
427
|
-
})
|
|
428
|
-
.attr('x2', function (d) {
|
|
429
|
-
return d.target.posx;
|
|
430
|
-
})
|
|
431
|
-
.attr('y2', function (d) {
|
|
432
|
-
return d.target.posy;
|
|
433
|
-
});
|
|
434
|
-
link
|
|
435
|
-
.select('image')
|
|
436
|
-
.attr('x', function (d) {
|
|
437
|
-
const x1 = d.source.posx, x2 = d.target.posx, x = x1 - (x1 - x2) / 2;
|
|
438
|
-
return x - 8;
|
|
439
|
-
})
|
|
440
|
-
.attr('y', function (d) {
|
|
441
|
-
const y1 = d.source.posy, y2 = d.target.posy, y = y1 - (y1 - y2) / 2;
|
|
442
|
-
return y - 12;
|
|
443
|
-
});
|
|
444
|
-
link
|
|
445
|
-
.select('rect')
|
|
446
|
-
.attr('opacity', 1)
|
|
447
|
-
.attr('x', function (d) {
|
|
448
|
-
return d.source.posx;
|
|
449
|
-
})
|
|
450
|
-
.attr('y', function (d) {
|
|
451
|
-
return d.source.posy;
|
|
452
|
-
})
|
|
453
|
-
.selectAll('animate')
|
|
454
|
-
.each(function (d, i) {
|
|
455
|
-
if (i === 0) {
|
|
456
|
-
d3.select(this)
|
|
457
|
-
.attr('attributeName', function (d) {
|
|
458
|
-
return 'x';
|
|
459
|
-
})
|
|
460
|
-
.attr('from', function (d) {
|
|
461
|
-
const n = d.source.posx - 1;
|
|
462
|
-
return n;
|
|
463
|
-
})
|
|
464
|
-
.attr('to', function (d) {
|
|
465
|
-
return d.target.posx;
|
|
466
|
-
});
|
|
467
|
-
}
|
|
468
|
-
else {
|
|
469
|
-
d3.select(this)
|
|
470
|
-
.attr('attributeName', function (d) {
|
|
471
|
-
return 'y';
|
|
472
|
-
})
|
|
473
|
-
.attr('from', function (d) {
|
|
474
|
-
return d.source.posy;
|
|
475
|
-
})
|
|
476
|
-
.attr('to', function (d) {
|
|
477
|
-
return d.target.posy;
|
|
478
|
-
});
|
|
479
|
-
}
|
|
480
|
-
d3.select(this)
|
|
481
|
-
.attr('attributeType', 'XML')
|
|
482
|
-
.attr('begin', '0.5s')
|
|
483
|
-
.attr('dur', function (d) {
|
|
484
|
-
return '1.0s';
|
|
485
|
-
})
|
|
486
|
-
.attr('repeatCount', 'indefinite');
|
|
487
|
-
});
|
|
488
|
-
} // end of ticked
|
|
489
|
-
function removeTooltip() {
|
|
490
|
-
if (tooltip) {
|
|
491
|
-
tooltip.style('display', 'none');
|
|
492
|
-
}
|
|
493
|
-
}
|
|
494
|
-
function drawTooltip(event, d, endpointUtlizationJson) {
|
|
495
|
-
document.getElementById('epTooltip').innerHTML = readKeyValues(d, endpointUtlizationJson);
|
|
496
|
-
tooltip.style('display', 'block');
|
|
497
|
-
tooltip.style('white-space', 'pre-wrap');
|
|
498
|
-
const x = event.pageX + 'px';
|
|
499
|
-
const y = event.pageY + 'px';
|
|
500
|
-
tooltip.style('left', x);
|
|
501
|
-
tooltip.style('top', y);
|
|
502
|
-
}
|
|
503
|
-
function readKeyValues(d, endpointUtlizationJson) {
|
|
504
|
-
let info = "<div class='tool-tip-container' style='font-size:14px;font-family:Open Sans; font-weight: 600; font-color: var(--tableText);'>";
|
|
505
|
-
const keys = Object.keys(d);
|
|
506
|
-
keys.forEach(function (k) {
|
|
507
|
-
if (k === 'status' ||
|
|
508
|
-
k === 'posy' ||
|
|
509
|
-
k === 'posx' ||
|
|
510
|
-
k === 'group' ||
|
|
511
|
-
k === 'hostedEdgeId' ||
|
|
512
|
-
k === 'value' ||
|
|
513
|
-
k === 'index' ||
|
|
514
|
-
k === 'parent' ||
|
|
515
|
-
k === 'depth' ||
|
|
516
|
-
k === 'x' ||
|
|
517
|
-
k === 'y' ||
|
|
518
|
-
k === 'id' ||
|
|
519
|
-
k === 'x0' ||
|
|
520
|
-
k === 'y0' ||
|
|
521
|
-
k === 'vy' ||
|
|
522
|
-
k === 'vx') {
|
|
523
|
-
// continue;
|
|
524
|
-
}
|
|
525
|
-
else if (k === 'children') {
|
|
526
|
-
const kVal = d[k];
|
|
527
|
-
if (kVal && kVal !== '') {
|
|
528
|
-
info = info + '<div class="prop-row">' + k + ': ' + kVal.length + '</div>';
|
|
529
|
-
}
|
|
530
|
-
}
|
|
531
|
-
else {
|
|
532
|
-
if (isAnObject(d[k])) {
|
|
533
|
-
const kVal = d[k];
|
|
534
|
-
if (kVal && kVal !== '') {
|
|
535
|
-
info = info + '<div class="prop-row">' + k + ': ' + kVal.name + '</div>';
|
|
536
|
-
}
|
|
537
|
-
}
|
|
538
|
-
else if (d[k] instanceof Array) {
|
|
539
|
-
info =
|
|
540
|
-
info +
|
|
541
|
-
'<div class="prop-row">' +
|
|
542
|
-
k +
|
|
543
|
-
': ' +
|
|
544
|
-
d[k].join('<br> ') +
|
|
545
|
-
'</div>';
|
|
546
|
-
}
|
|
547
|
-
else {
|
|
548
|
-
const vo = d[k];
|
|
549
|
-
if (vo && vo !== '') {
|
|
550
|
-
info =
|
|
551
|
-
info +
|
|
552
|
-
'<div class="prop-row">' +
|
|
553
|
-
k +
|
|
554
|
-
': ' +
|
|
555
|
-
(vo !== null || vo !== '' ? d[k] : 'N/A') +
|
|
556
|
-
'</div>';
|
|
557
|
-
}
|
|
558
|
-
}
|
|
559
|
-
}
|
|
560
|
-
});
|
|
561
|
-
return info + '</div>';
|
|
562
|
-
}
|
|
563
|
-
function isAnObject(o) {
|
|
564
|
-
return o instanceof Object && o.constructor === Object;
|
|
565
|
-
}
|
|
566
|
-
this.refreshRotate = false;
|
|
567
|
-
} // end of initTopoView
|
|
568
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IdentityServicePathComponent, deps: [{ token: i1.IdentityServicePathHelper }, { token: SETTINGS_SERVICE }, { token: ZITI_DATA_SERVICE }, { token: i2.Router }, { token: i3.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
569
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: IdentityServicePathComponent, selector: "app-identity-visualizer", ngImport: i0, template: "<div [ngClass]=\"{ 'full-screen': fullScreen }\" class=\"modal solid\" id=\"IdentityVisualizer\">\n <div class=\"tp-data-header\">\n <div class=\"modaltitle\">Identity Service Path</div>\n <div (click)=\"hide()\" class=\"buttonBall icon-close\" id=\"EscZEndpointClose\"></div>\n <div (click)=\"toggleModalSize()\" class=\"buttonBall resize\" id=\"ResizeModalButton\"></div>\n </div>\n <div [ngClass]=\"isDarkMode==true?'darkMode':'lightMode'\" class=\"identity-topology-container\">\n <div style=\"width: 100%; height: 80px; float: left\">\n <div class=\"ep-topology-filter-container listBox row\">\n <input\n (keyup)=\"filterSearchArray()\"\n [(ngModel)]=\"selectedService\"\n [matAutocomplete]=\"auto\"\n class=\"topology-filter-input\"\n id=\"filterText\"\n matInput\n placeholder=\"Type to search identity accessible services.\"\n />\n\n <div\n (click)=\"clearSearchFilter()\"\n *ngIf=\"filterText\"\n class=\"clear-svc-icon icon-close\"\n id=\"ClearSearchFilter\"\n ></div>\n <div [hidden]=\"!noSearchResults\" class=\"no-results-warning\">No Results Found</div>\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"autocompleteSearch($event)\">\n <mat-option *ngFor=\"let option of autocompleteOptions\" [value]=\"option.name\">\n {{ option.name }}\n </mat-option>\n </mat-autocomplete>\n </div>\n </div>\n\n <div class=\"topotip\" id=\"epTooltip\"></div>\n\n <svg style='pointer-events:all' height=\"1000\" id=\"IdentityTopology\" width=\"1200\">\n </svg>\n <lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n\n <div class=\"topology-legendA\">\n <div class=\"legend-item-head\">\n <div class=\"legend-text-heading\">Component Status</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle unregistered\"></div>\n <div class=\"legend-text\">Unregistered / Offline</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle registered_in_use\"></div>\n <div class=\"legend-text\">Registered, Online</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle errored\"></div>\n <div class=\"legend-text\">Errored</div>\n </div>\n </div>\n\n <div class=\"topology-legendB\">\n <div class=\"legend-item-head\">\n <div class=\"legend-text-heading\">Link Status</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle unregistered\"></div>\n <div class=\"legend-text\">Offline</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle registered_in_use\"></div>\n <div class=\"legend-text\">In Usage</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle registered_not_in_use\"></div>\n <div class=\"legend-text\">Usage Date N/A</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle linkerrored\"></div>\n <div class=\"legend-text\">Errored</div>\n </div>\n </div>\n\n </div>\n</div>\n", styles: ["#IdentityVisualizer{overflow:hidden;width:75%;height:85%;background-color:var(--background);border-radius:1.5625rem;z-index:1001;margin:auto;inset:0rem;position:fixed}#IdentityVisualizer .buttonBall{cursor:pointer;font-weight:600}#IdentityVisualizer .buttonBall.icon-close{position:absolute;top:1.25rem;right:1.25rem;font-size:1.4375rem;color:var(--icon)}#IdentityVisualizer .buttonBall:hover{filter:brightness(50%)}#IdentityVisualizer .clear-svc-icon{font-size:1.4375rem;font-weight:600;position:relative;top:.9375rem;right:2.5rem;color:var(--icon);cursor:pointer}#IdentityVisualizer .clear-svc-icon:hover{filter:brightness(50%)}#IdentityVisualizer.full-screen{width:100%;height:100%;border-radius:0}.ep-topology-filter-container{width:37%;display:flex;flex-direction:row;position:absolute;margin:1.25rem;padding:0}.buttonBall.resize{top:1.25rem;width:1.4375rem;height:1.4375rem;right:3.4375rem;background-image:url(/assets/svgs/Resize.svg);background-size:1.4375rem 1.4375rem;position:absolute;cursor:pointer}.identity-topology-container{display:flex;margin-left:-.3125rem;margin-top:.625rem;flex-direction:column;cursor:grab}.lightMode{background:#f5e9f2;background-image:linear-gradient(#ecd3e6 .125rem,transparent 0),linear-gradient(90deg,#ecd3e6 .125rem,transparent 0),linear-gradient(#ecd3e6 .0625rem,transparent 0),linear-gradient(90deg,#ecd3e6 .0625rem,transparent 0);background-size:2.5rem 2.5rem,2.5rem 2.5rem,.625rem .625rem,.625rem .625rem}.darkMode{background:#000a17;background-image:linear-gradient(#001127 .125rem,transparent 0),linear-gradient(90deg,#001127 .125rem,transparent 0),linear-gradient(#001127 1px,transparent 0),linear-gradient(90deg,#001127 1px,transparent 0);background-size:2.5rem 2.5rem,2.5rem 2.5rem,.625rem .625rem,.625rem .625rem}.tp-data-header{height:2.5rem;font-size:1.5625rem;font-weight:600;margin-left:1.25rem;margin-top:.625rem;margin-bottom:.3125rem;font-family:Russo One;color:var(--primaryColor);font-size:1.875rem;text-transform:uppercase;font-weight:400}.node text{font:.75rem Open Sans,Arial,sans-serif}.modaltitle{padding-top:.375rem;padding-left:.3125rem;color:var(--primaryColor)}.modalbuttons{padding-right:1.25rem}.listBox.row .close{position:fixed;display:flex;flex-direction:column;font-family:icomoon!important;font-style:normal;font-weight:600;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:var(--icon);text-align:center;font-size:2.1875rem;line-height:2.5rem;left:35%;top:17%;width:2.5rem;height:2.5rem;background-image:url(/assets/svgs/close.svg);z-index:600;background-position:center center;background-size:75%;cursor:pointer;transition:.3s;justify-content:end;align-items:center}.tp-topo-data-header{border:0rem solid black;height:75rem;font-size:.75rem;font-weight:400;margin-left:.75rem;margin-top:.1875rem;color:var(--primaryColor)}.services-select{width:25rem;flex-shrink:0;border-radius:1.6875rem;height:3.1875rem;margin-left:1.375rem;margin-top:.625rem;background-color:#fff;border-color:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);color:var(--tableText);padding-left:1.25rem}select{background-image:url(/assets/svgs/ArrowDown.svg);background-position:center right .9375rem;background-repeat:no-repeat;background-size:1.125rem;padding-right:2.9375rem}.topology-filter-input{height:3.125rem;width:95%;border-radius:1.5625rem;border-color:var(--navigation);background-color:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding-left:1.25rem}.topotip{display:none;position:fixed;background:var(--navigation);border:.1rem;border-radius:.75rem;pointer-events:none;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);transition:background-color .3s;padding:.3125rem 0;font-size:1.0625rem;font-weight:700;color:var(--tableText);z-index:2000;opacity:1;padding:1rem}.topology-legendA{border:0rem solid blue;width:12.5rem;border-radius:.75rem;margin-bottom:.625rem;margin-right:.625rem;position:absolute;display:inline-block;top:4.6875rem;right:0rem;background:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding:0rem .625rem .3125rem;margin-top:0}.topology-legendB{width:12.5rem;border:0rem solid blue;border-radius:.75rem;margin-bottom:.625rem;margin-right:.625rem;position:absolute;top:12.5rem;right:0rem;background:var(--navigation);display:inline-block;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding:0rem .625rem .3125rem;margin-left:.625rem}.legend-item{width:100%;height:100%;display:inline-block}.legend-item-head{width:105%;height:100%;display:inline-block;border:0rem solid blue;left:-.1875rem}.legend-circle{height:.75rem;width:.75rem;border-radius:.9375rem;display:inline-block;margin-top:.4375rem}.legend-circle.unregistered{background-color:#d8dce7}.legend-circle.registered_not_in_use{border:.0625rem solid #08dc5a;background-color:#fff}.legend-circle.registered_in_use{background-color:#08dc5a}.legend-circle.errored{background-color:#fb0d3d}.legend-circle.linkerrored{background-image:url(/assets/images/visualizer/link-cut.png);background-size:contain}.legend-text{display:inline-block;font-size:.9375rem;font-weight:600;color:var(--tableText);padding-left:.4375rem;padding-bottom:.25rem}.legend-text-heading{text-align:center;display:inline-block;font-size:.875rem;font-weight:600;color:var(--tableText);padding-left:.625rem;padding-top:.125rem;padding-bottom:.125rem;color:#8a2be2}.legend-text2{display:inline-block;font-size:.625rem;font-weight:400;color:var(--tableText);padding-left:.125rem;padding-bottom:.25rem}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.rotating{animation:rotating 2s linear infinite}.tool-tip-container .prop-row{display:grid;grid-template-columns:auto auto;grid-gap:.625rem;height:-moz-fit-content;height:fit-content;width:-moz-fit-content;width:fit-content;min-height:1.5625rem;align-items:center;padding:.5rem}.tool-tip-container .prop-row:nth-child(2n){background-color:var(--formBackground)}::ng-deep .cdk-overlay-pane:not(.mat-mdc-autocomplete-panel-above) div.mat-mdc-autocomplete-panel{border-radius:14px;background:var(--background);color:var(--tableText)}::ng-deep .mat-mdc-option.mdc-list-item{align-items:center;color:var(--tableText)}::ng-deep .mat-mdc-option.mdc-list-item:hover:not(.mat-option-disabled),::ng-deep .mat-mdc-option.mdc-list-item:focus:not(.mat-option-disabled){border-color:var(--primaryColor);border-radius:14px;border:.01rem solid var(--primaryColor)}::ng-deep .mat-mdc-raised-button .mdc-button__ripple{border:.1rem solid var(--primaryColor)}::ng-deep .p-button.p-button-icon-only{width:1.357rem}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i8.LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }] }); }
|
|
570
|
-
}
|
|
571
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IdentityServicePathComponent, decorators: [{
|
|
572
|
-
type: Component,
|
|
573
|
-
args: [{ selector: 'app-identity-visualizer', template: "<div [ngClass]=\"{ 'full-screen': fullScreen }\" class=\"modal solid\" id=\"IdentityVisualizer\">\n <div class=\"tp-data-header\">\n <div class=\"modaltitle\">Identity Service Path</div>\n <div (click)=\"hide()\" class=\"buttonBall icon-close\" id=\"EscZEndpointClose\"></div>\n <div (click)=\"toggleModalSize()\" class=\"buttonBall resize\" id=\"ResizeModalButton\"></div>\n </div>\n <div [ngClass]=\"isDarkMode==true?'darkMode':'lightMode'\" class=\"identity-topology-container\">\n <div style=\"width: 100%; height: 80px; float: left\">\n <div class=\"ep-topology-filter-container listBox row\">\n <input\n (keyup)=\"filterSearchArray()\"\n [(ngModel)]=\"selectedService\"\n [matAutocomplete]=\"auto\"\n class=\"topology-filter-input\"\n id=\"filterText\"\n matInput\n placeholder=\"Type to search identity accessible services.\"\n />\n\n <div\n (click)=\"clearSearchFilter()\"\n *ngIf=\"filterText\"\n class=\"clear-svc-icon icon-close\"\n id=\"ClearSearchFilter\"\n ></div>\n <div [hidden]=\"!noSearchResults\" class=\"no-results-warning\">No Results Found</div>\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"autocompleteSearch($event)\">\n <mat-option *ngFor=\"let option of autocompleteOptions\" [value]=\"option.name\">\n {{ option.name }}\n </mat-option>\n </mat-autocomplete>\n </div>\n </div>\n\n <div class=\"topotip\" id=\"epTooltip\"></div>\n\n <svg style='pointer-events:all' height=\"1000\" id=\"IdentityTopology\" width=\"1200\">\n </svg>\n <lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n\n <div class=\"topology-legendA\">\n <div class=\"legend-item-head\">\n <div class=\"legend-text-heading\">Component Status</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle unregistered\"></div>\n <div class=\"legend-text\">Unregistered / Offline</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle registered_in_use\"></div>\n <div class=\"legend-text\">Registered, Online</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle errored\"></div>\n <div class=\"legend-text\">Errored</div>\n </div>\n </div>\n\n <div class=\"topology-legendB\">\n <div class=\"legend-item-head\">\n <div class=\"legend-text-heading\">Link Status</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle unregistered\"></div>\n <div class=\"legend-text\">Offline</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle registered_in_use\"></div>\n <div class=\"legend-text\">In Usage</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle registered_not_in_use\"></div>\n <div class=\"legend-text\">Usage Date N/A</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle linkerrored\"></div>\n <div class=\"legend-text\">Errored</div>\n </div>\n </div>\n\n </div>\n</div>\n", styles: ["#IdentityVisualizer{overflow:hidden;width:75%;height:85%;background-color:var(--background);border-radius:1.5625rem;z-index:1001;margin:auto;inset:0rem;position:fixed}#IdentityVisualizer .buttonBall{cursor:pointer;font-weight:600}#IdentityVisualizer .buttonBall.icon-close{position:absolute;top:1.25rem;right:1.25rem;font-size:1.4375rem;color:var(--icon)}#IdentityVisualizer .buttonBall:hover{filter:brightness(50%)}#IdentityVisualizer .clear-svc-icon{font-size:1.4375rem;font-weight:600;position:relative;top:.9375rem;right:2.5rem;color:var(--icon);cursor:pointer}#IdentityVisualizer .clear-svc-icon:hover{filter:brightness(50%)}#IdentityVisualizer.full-screen{width:100%;height:100%;border-radius:0}.ep-topology-filter-container{width:37%;display:flex;flex-direction:row;position:absolute;margin:1.25rem;padding:0}.buttonBall.resize{top:1.25rem;width:1.4375rem;height:1.4375rem;right:3.4375rem;background-image:url(/assets/svgs/Resize.svg);background-size:1.4375rem 1.4375rem;position:absolute;cursor:pointer}.identity-topology-container{display:flex;margin-left:-.3125rem;margin-top:.625rem;flex-direction:column;cursor:grab}.lightMode{background:#f5e9f2;background-image:linear-gradient(#ecd3e6 .125rem,transparent 0),linear-gradient(90deg,#ecd3e6 .125rem,transparent 0),linear-gradient(#ecd3e6 .0625rem,transparent 0),linear-gradient(90deg,#ecd3e6 .0625rem,transparent 0);background-size:2.5rem 2.5rem,2.5rem 2.5rem,.625rem .625rem,.625rem .625rem}.darkMode{background:#000a17;background-image:linear-gradient(#001127 .125rem,transparent 0),linear-gradient(90deg,#001127 .125rem,transparent 0),linear-gradient(#001127 1px,transparent 0),linear-gradient(90deg,#001127 1px,transparent 0);background-size:2.5rem 2.5rem,2.5rem 2.5rem,.625rem .625rem,.625rem .625rem}.tp-data-header{height:2.5rem;font-size:1.5625rem;font-weight:600;margin-left:1.25rem;margin-top:.625rem;margin-bottom:.3125rem;font-family:Russo One;color:var(--primaryColor);font-size:1.875rem;text-transform:uppercase;font-weight:400}.node text{font:.75rem Open Sans,Arial,sans-serif}.modaltitle{padding-top:.375rem;padding-left:.3125rem;color:var(--primaryColor)}.modalbuttons{padding-right:1.25rem}.listBox.row .close{position:fixed;display:flex;flex-direction:column;font-family:icomoon!important;font-style:normal;font-weight:600;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:var(--icon);text-align:center;font-size:2.1875rem;line-height:2.5rem;left:35%;top:17%;width:2.5rem;height:2.5rem;background-image:url(/assets/svgs/close.svg);z-index:600;background-position:center center;background-size:75%;cursor:pointer;transition:.3s;justify-content:end;align-items:center}.tp-topo-data-header{border:0rem solid black;height:75rem;font-size:.75rem;font-weight:400;margin-left:.75rem;margin-top:.1875rem;color:var(--primaryColor)}.services-select{width:25rem;flex-shrink:0;border-radius:1.6875rem;height:3.1875rem;margin-left:1.375rem;margin-top:.625rem;background-color:#fff;border-color:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);color:var(--tableText);padding-left:1.25rem}select{background-image:url(/assets/svgs/ArrowDown.svg);background-position:center right .9375rem;background-repeat:no-repeat;background-size:1.125rem;padding-right:2.9375rem}.topology-filter-input{height:3.125rem;width:95%;border-radius:1.5625rem;border-color:var(--navigation);background-color:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding-left:1.25rem}.topotip{display:none;position:fixed;background:var(--navigation);border:.1rem;border-radius:.75rem;pointer-events:none;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);transition:background-color .3s;padding:.3125rem 0;font-size:1.0625rem;font-weight:700;color:var(--tableText);z-index:2000;opacity:1;padding:1rem}.topology-legendA{border:0rem solid blue;width:12.5rem;border-radius:.75rem;margin-bottom:.625rem;margin-right:.625rem;position:absolute;display:inline-block;top:4.6875rem;right:0rem;background:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding:0rem .625rem .3125rem;margin-top:0}.topology-legendB{width:12.5rem;border:0rem solid blue;border-radius:.75rem;margin-bottom:.625rem;margin-right:.625rem;position:absolute;top:12.5rem;right:0rem;background:var(--navigation);display:inline-block;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding:0rem .625rem .3125rem;margin-left:.625rem}.legend-item{width:100%;height:100%;display:inline-block}.legend-item-head{width:105%;height:100%;display:inline-block;border:0rem solid blue;left:-.1875rem}.legend-circle{height:.75rem;width:.75rem;border-radius:.9375rem;display:inline-block;margin-top:.4375rem}.legend-circle.unregistered{background-color:#d8dce7}.legend-circle.registered_not_in_use{border:.0625rem solid #08dc5a;background-color:#fff}.legend-circle.registered_in_use{background-color:#08dc5a}.legend-circle.errored{background-color:#fb0d3d}.legend-circle.linkerrored{background-image:url(/assets/images/visualizer/link-cut.png);background-size:contain}.legend-text{display:inline-block;font-size:.9375rem;font-weight:600;color:var(--tableText);padding-left:.4375rem;padding-bottom:.25rem}.legend-text-heading{text-align:center;display:inline-block;font-size:.875rem;font-weight:600;color:var(--tableText);padding-left:.625rem;padding-top:.125rem;padding-bottom:.125rem;color:#8a2be2}.legend-text2{display:inline-block;font-size:.625rem;font-weight:400;color:var(--tableText);padding-left:.125rem;padding-bottom:.25rem}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.rotating{animation:rotating 2s linear infinite}.tool-tip-container .prop-row{display:grid;grid-template-columns:auto auto;grid-gap:.625rem;height:-moz-fit-content;height:fit-content;width:-moz-fit-content;width:fit-content;min-height:1.5625rem;align-items:center;padding:.5rem}.tool-tip-container .prop-row:nth-child(2n){background-color:var(--formBackground)}::ng-deep .cdk-overlay-pane:not(.mat-mdc-autocomplete-panel-above) div.mat-mdc-autocomplete-panel{border-radius:14px;background:var(--background);color:var(--tableText)}::ng-deep .mat-mdc-option.mdc-list-item{align-items:center;color:var(--tableText)}::ng-deep .mat-mdc-option.mdc-list-item:hover:not(.mat-option-disabled),::ng-deep .mat-mdc-option.mdc-list-item:focus:not(.mat-option-disabled){border-color:var(--primaryColor);border-radius:14px;border:.01rem solid var(--primaryColor)}::ng-deep .mat-mdc-raised-button .mdc-button__ripple{border:.1rem solid var(--primaryColor)}::ng-deep .p-button.p-button-icon-only{width:1.357rem}\n"] }]
|
|
574
|
-
}], ctorParameters: function () { return [{ type: i1.IdentityServicePathHelper }, { type: i9.SettingsService, decorators: [{
|
|
575
|
-
type: Inject,
|
|
576
|
-
args: [SETTINGS_SERVICE]
|
|
577
|
-
}] }, { type: i10.ZitiDataService, decorators: [{
|
|
578
|
-
type: Inject,
|
|
579
|
-
args: [ZITI_DATA_SERVICE]
|
|
580
|
-
}] }, { type: i2.Router }, { type: i3.MatDialogRef }, { type: undefined, decorators: [{
|
|
581
|
-
type: Inject,
|
|
582
|
-
args: [MAT_DIALOG_DATA]
|
|
583
|
-
}] }]; } });
|
|
584
|
-
class ServiceData {
|
|
585
|
-
}
|
|
586
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHktc2VydmljZS1wYXRoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy92aXN1YWxpemVyL2lkZW50aXR5LXNlcnZpY2UtcGF0aC9pZGVudGl0eS1zZXJ2aWNlLXBhdGguY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMveml0aS1jb25zb2xlLWxpYi9zcmMvbGliL2ZlYXR1cmVzL3Zpc3VhbGl6ZXIvaWRlbnRpdHktc2VydmljZS1wYXRoL2lkZW50aXR5LXNlcnZpY2UtcGF0aC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0QkFBNEI7QUFDNUIsT0FBTyxFQUNMLFNBQVMsRUFFVCxNQUFNLEdBR1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSwwQkFBMEIsQ0FBQztBQUV6RSxPQUFPLEVBQ0wsZ0JBQWdCLEdBRWpCLE1BQU0sb0NBQW9DLENBQUM7QUFDNUMsT0FBTyxFQUNMLGlCQUFpQixHQUVsQixNQUFNLHFDQUFxQyxDQUFDO0FBRTdDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRXpCLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQzs7Ozs7Ozs7Ozs7O0FBV3ZCLE1BQU0sT0FBTyw0QkFBNEI7SUF5QnZDLFlBQ1UseUJBQW9ELEVBQzNCLGVBQWdDLEVBQzlCLFdBQTRCLEVBQ3ZELE1BQWMsRUFDZCxTQUFxRCxFQUM3QixJQUFTO1FBTGpDLDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMkI7UUFDM0Isb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQzlCLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUN2RCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsY0FBUyxHQUFULFNBQVMsQ0FBNEM7UUFDN0Is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TUFBTTsyQkFBQyxlQUFlOztBQWltQjNCLE1BQU0sV0FBVztDQUdoQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBwcmVmZXItY29uc3Q6IDEgKi9cbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgVmlld0NoaWxkLFxuICBJbmplY3QsXG4gIE9uSW5pdCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIFNFVFRJTkdTX1NFUlZJQ0UsXG4gIFNldHRpbmdzU2VydmljZSxcbn0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQge1xuICBaSVRJX0RBVEFfU0VSVklDRSxcbiAgWml0aURhdGFTZXJ2aWNlLFxufSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy96aXRpLWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBJZGVudGl0eVNlcnZpY2VQYXRoSGVscGVyIH0gZnJvbSAnLi9pZGVudGl0eS1zZXJ2aWNlLXBhdGguaGVscGVyJztcbmltcG9ydCAqIGFzIGQzIGZyb20gJ2QzJztcbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1pZGVudGl0eS12aXN1YWxpemVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2lkZW50aXR5LXNlcnZpY2UtcGF0aC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2lkZW50aXR5LXNlcnZpY2UtcGF0aC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBJZGVudGl0eVNlcnZpY2VQYXRoQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHVibGljIGQzO1xuICBpc0RhcmtNb2RlID0gZmFsc2U7XG4gIHJlZnJlc2hSb3RhdGUgPSBmYWxzZTtcbiAgY2xvc2VSb3RhdGUgPSB0cnVlO1xuICBmaWx0ZXJUZXh0ID0gJ2ZldGNoaW5nIHNlcnZpY2VzLi4nO1xuICBub1NlYXJjaFJlc3VsdHMgPSBmYWxzZTtcbiAgYXV0b2NvbXBsZXRlT3B0aW9ucyA9IFtdO1xuICBmdWxsU2NyZWVuID0gZmFsc2U7XG4gIHNlcnZpY2VPcHRpb25zOiBhbnk7XG4gIGVuZHBvaW50RGF0YTtcbiAgbmV0d29ya0dyYXBoO1xuICBncmFwaEpzb25PYmo7XG4gIHNlcnZpY2VzO1xuICBlZGdlcm91dGVycztcbiAgZW5kcG9pbnRzID0gW107XG4gIHNlbGVjdGVkU2VydmljZSA9ICcnO1xuICBzZXJ2aWNlU2VsZWN0RXJyb3I7XG4gIGRvRW5kcG9pbnRIYXNBcHB3YW5zID0gZmFsc2U7XG4gIGRvRW5kcG9pbnRIYXNQdWJsaWNSb3V0ZXJzID0gZmFsc2U7XG4gIGRvRW5kcG9pbnRIYXNTZXJ2aWNlc0luUHJpdmF0ZU53ID0gZmFsc2U7XG4gIGlzTG9hZGluZyA9IGZhbHNlO1xuICBjb3VudEdycDJOZHMgPSAwO1xuICBjb3VudEdycDNOZHMgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaWRlbnRpdHlTZXJ2aWNlUGF0aEhlbHBlcjogSWRlbnRpdHlTZXJ2aWNlUGF0aEhlbHBlcixcbiAgICBASW5qZWN0KFNFVFRJTkdTX1NFUlZJQ0UpIHB1YmxpYyBzZXR0aW5nc1NlcnZpY2U6IFNldHRpbmdzU2VydmljZSxcbiAgICBASW5qZWN0KFpJVElfREFUQV9TRVJWSUNFKSBwcml2YXRlIHppdGlTZXJ2aWNlOiBaaXRpRGF0YVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPElkZW50aXR5U2VydmljZVBhdGhDb21wb25lbnQ+LFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55XG4gICkge1xuICAgIHRoaXMuZW5kcG9pbnREYXRhID0gZGF0YS5pZGVudGl0eTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZ2V0RW5kcG9pbnROZXR3b3JrQXNDb2RlKCk7XG4gICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zID0gW107XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIGNvbnN0IGJnQ29sID0gZDMuY29sb3IoZDMuc2VsZWN0KCdib2R5Jykuc3R5bGUoXCJiYWNrZ3JvdW5kLWNvbG9yXCIpKS5mb3JtYXRIZXgoKTtcbiAgICB0aGlzLmlzRGFya01vZGUgPSBiZ0NvbCA9PScjMTgxOTFkJyA/IHRydWU6IGZhbHNlO1xuICB9XG5cbiAgZ2V0RW5kcG9pbnROZXR3b3JrQXNDb2RlKCkge1xuICAgIGNvbnN0IHBhZ2VzaXplID0gNTAwO1xuICAgIGNvbnN0IHNlcnZpY2VzX3BhZ2luZyA9IHtcbiAgICAgIHNlYXJjaE9uOiAnbmFtZScsXG4gICAgICBmaWx0ZXI6ICcnLFxuICAgICAgdG90YWw6IHBhZ2VzaXplLFxuICAgICAgcGFnZTogMSxcbiAgICAgIHNvcnQ6ICduYW1lJyxcbiAgICAgIG9yZGVyOiAnYXNjJyxcbiAgICB9O1xuXG4gICAgdGhpcy56aXRpU2VydmljZVxuICAgICAgLmdldChgaWRlbnRpdGllcy8ke3RoaXMuZW5kcG9pbnREYXRhLmlkfS9zZXJ2aWNlc2AsIHNlcnZpY2VzX3BhZ2luZywgW10pXG4gICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgIHRoaXMuc2VydmljZXMgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgdGhpcy5jbG9zZVJvdGF0ZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICghdGhpcy5zZXJ2aWNlcyB8fCB0aGlzLnNlcnZpY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuc2VydmljZXMgPSBbXTtcbiAgICAgICAgICB0aGlzLnNlcnZpY2VPcHRpb25zID0gW107XG4gICAgICAgICAgdGhpcy5zZXJ2aWNlT3B0aW9ucy5wdXNoKG5vU2VydmljZXMoKSk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFNlcnZpY2UgPSAnU2VydmljZXMgbm90IGZvdW5kIGZvciBhIHNlbGVjdGVkIGlkZW50aXR5JztcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHBhZ2VzID0gTWF0aC5jZWlsKHJlc3VsdC5tZXRhLnBhZ2luYXRpb24udG90YWxDb3VudCAvIHBhZ2VzaXplKTtcbiAgICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgICAgICAgIGZvciAobGV0IHBhZ2UgPSAyOyBwYWdlIDw9IHBhZ2VzOyBwYWdlKyspIHtcbiAgICAgICAgICAgIHNlcnZpY2VzX3BhZ2luZy5wYWdlID0gcGFnZTtcbiAgICAgICAgICAgIGNvbnN0IHRtcF9wcm9taXNlID0gdGhpcy56aXRpU2VydmljZVxuICAgICAgICAgICAgICAuZ2V0KFxuICAgICAgICAgICAgICAgIGBpZGVudGl0aWVzLyR7dGhpcy5lbmRwb2ludERhdGEuaWR9L3NlcnZpY2VzYCxcbiAgICAgICAgICAgICAgICBzZXJ2aWNlc19wYWdpbmcsXG4gICAgICAgICAgICAgICAgW11cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAudGhlbigocGFnZVJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHBhZ2VSZXN1bHQuZGF0YS5mb3JFYWNoKChzZXJ2KSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VzLnB1c2goc2Vydik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0bXBfcHJvbWlzZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMueml0aVNlcnZpY2VcbiAgICAgICAgICAgICAgLmdldChgaWRlbnRpdGllcy8ke3RoaXMuZW5kcG9pbnREYXRhLmlkfS9lZGdlLXJvdXRlcnNgLCB7fSwgW10pXG4gICAgICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVkZ2Vyb3V0ZXJzID0gW107XG4gICAgICAgICAgICAgICAgcmVzdWx0LmRhdGEuZm9yRWFjaCgocmVjKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmVkZ2Vyb3V0ZXJzLnB1c2gocmVjKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2VPcHRpb25zID0gY3JlYXRlU2VydmljZU9wdGlvbnModGhpcy5zZXJ2aWNlcyk7XG4gICAgICAgICAgICB0aGlzLmZpbHRlclRleHQgPVxuICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VPcHRpb25zLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2VydmljZU9wdGlvbnNbMF0ubmFtZTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZXJ2aWNlID1cbiAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlT3B0aW9ucy5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICA/ICdTZXJ2aWNlcyBub3QgZm91bmQgZm9yIGEgc2VsZWN0ZWQgaWRlbnRpdHknXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNlcnZpY2VPcHRpb25zWzBdLm5hbWU7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMgPSB0aGlzLnNlcnZpY2VPcHRpb25zO1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlQ2hhbmdlZCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVNlcnZpY2VPcHRpb25zKF9zZXJ2aWNlcykge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IFtdO1xuICAgICAgY29uc3Qgc2VydmljZU5hbWVzID0gW107XG4gICAgICBfc2VydmljZXM/LmZpbmQoKHNydmljZSkgPT4ge1xuICAgICAgICBpZiAoIXNlcnZpY2VOYW1lcy5pbmNsdWRlcyhzcnZpY2UubmFtZSkpIHtcbiAgICAgICAgICBzZXJ2aWNlTmFtZXMucHVzaChzcnZpY2UubmFtZSk7XG4gICAgICAgICAgY29uc3Qgc2QgPSBuZXcgU2VydmljZURhdGEoKTtcbiAgICAgICAgICBzZC5pZCA9IHNydmljZS5pZDtcbiAgICAgICAgICBzZC5uYW1lID0gc3J2aWNlLm5hbWU7XG4gICAgICAgICAgb3B0aW9ucy5wdXNoKHNkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBub1NlcnZpY2VzKCkge1xuICAgICAgY29uc3Qgc2QgPSBuZXcgU2VydmljZURhdGEoKTtcbiAgICAgIHNkLmlkID0gJyc7XG4gICAgICBzZC5uYW1lID0gJ05PIFNFUlZJQ0VTJztcbiAgICAgIHJldHVybiBzZDtcbiAgICB9XG4gIH0gLy8gZW5kIG9mIGdldEVuZHBvaW50TmV0d29ya0FzQ29kZVxuXG4gIGZpbHRlclNlYXJjaEFycmF5KCkge1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucyA9IFtdO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucyA9IHRoaXMuc2VydmljZU9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+XG4gICAgICBvcHRpb24ubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc2VsZWN0ZWRTZXJ2aWNlLnRvTG93ZXJDYXNlKCkpXG4gICAgKTtcbiAgfVxuXG4gIGNsZWFyU2VhcmNoRmlsdGVyKCkge1xuICAgIHRoaXMuZmlsdGVyVGV4dCA9ICdZb3UgY2FuIGZpbHRlciBzZXJ2aWNlcyBieSB0eXBpbmcgaGVyZSc7XG4gICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zID0gdGhpcy5zZXJ2aWNlT3B0aW9ucztcbiAgICB0aGlzLnNlbGVjdGVkU2VydmljZSA9ICcnO1xuICB9XG5cbiAgYXV0b2NvbXBsZXRlU2VhcmNoKGV2ZW50KSB7XG4gICAgdGhpcy5zZXJ2aWNlQ2hhbmdlZCgpO1xuICB9XG5cbiAgc2VydmljZUNoYW5nZWQoKSB7XG4gICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgY29uc3QgYWxsUHJvbWlzZXMgPSBbXTtcbiAgICAgbGV0IHNlcnZpY2VPYiA9IG51bGw7XG4gICAgIGxldCBzZXJ2aWNlX2NvbmZpZ3MgPSBbXTtcblxuICAgICBzZXJ2aWNlT2IgPSB0aGlzLnNlcnZpY2VzICYmIHRoaXMuc2VydmljZXMuZmluZCgocmVjKSA9PiB7XG4gICAgICByZXR1cm4gIChyZWMubmFtZSA9PT0gdGhpcy5zZWxlY3RlZFNlcnZpY2UpO1xuICAgICB9KTtcblxuICAgICBpZiAoIXNlcnZpY2VPYikge1xuICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgcmV0dXJuO1xuICAgICB9XG5cbiAgICAgY29uc3QgY29uZmlnc191cmwgPSB0aGlzLmdldExpbmtGb3JSZXNvdXJjZShzZXJ2aWNlT2IsICdjb25maWdzJyk7XG5cbiAgICAgY29uc3QgY29uZmlnUHJvbWlzZSA9IHRoaXMueml0aVNlcnZpY2VcbiAgICAgIC5nZXQoY29uZmlnc191cmwsIHt9LCBbXSlcbiAgICAgIC50aGVuKChjb25maWdzKSA9PiB7XG4gICAgICAgIHNlcnZpY2VfY29uZmlncyA9IGNvbmZpZ3MgJiYgY29uZmlncy5kYXRhID8gY29uZmlncy5kYXRhIDogW107XG4gICAgICB9KTtcbiAgICAgY29uc3Qgc2VydmljZV9lZGdlX3JvdXRlcl9wb2xpY2llc191cmwgPSB0aGlzLmdldExpbmtGb3JSZXNvdXJjZShcbiAgICAgIHNlcnZpY2VPYixcbiAgICAgICdzZXJ2aWNlLWVkZ2Utcm91dGVyLXBvbGljaWVzJ1xuICAgICApO1xuICAgICBjb25zdCBzZXJ2aWNlX3BvbGljaWVzX3VybCA9IHRoaXMuZ2V0TGlua0ZvclJlc291cmNlKFxuICAgICAgc2VydmljZU9iLFxuICAgICAgJ3NlcnZpY2UtcG9saWNpZXMnXG4gICAgICkucmVwbGFjZSgnLi8nLCAnJyk7IC8vIGRpYWwsIEJpbmQgaW5mb1xuXG4gICAgbGV0IGJpbmRQb2xpY2llcyA9IFtdO1xuICAgIGxldCBiaW5kSWRuZXRpdGllcyA9IFtdO1xuICAgIGNvbnN0IHByb21pc2UyID0gdGhpcy56aXRpU2VydmljZVxuICAgICAgLmdldChzZXJ2aWNlX3BvbGljaWVzX3VybCwge30sIFtdKVxuICAgICAgLnRoZW4oKHBvbGljaWVzKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkZW50aXR5UHJvbWlzZXMgPSBbXTtcbiAgICAgICAgXy5pc0FycmF5KHBvbGljaWVzLmRhdGEpICYmIHBvbGljaWVzLmRhdGEuZm9yRWFjaCgocG9saWN5KSA9PiB7XG4gICAgICAgICAgaWYgKHBvbGljeS50eXBlID09PSAnQmluZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGJpbmRJZGVudGl0aWVzVXJsID0gdGhpcy5nZXRMaW5rRm9yUmVzb3VyY2UoXG4gICAgICAgICAgICAgIHBvbGljeSxcbiAgICAgICAgICAgICAgJ2lkZW50aXRpZXMnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgcHJvbXNlID0gdGhpcy56aXRpU2VydmljZVxuICAgICAgICAgICAgICAuZ2V0KGJpbmRJZGVudGl0aWVzVXJsLnJlcGxhY2UoJy4vJywgJycpLCB7fSwgW10pXG4gICAgICAgICAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzICYmIHJlcy5kYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIHJlcy5kYXRhLmZvckVhY2goKHJzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkSXRlbVRvQXJyYXkoYmluZElkbmV0aXRpZXMsIHJzKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmFkZEl0ZW1Ub0FycmF5KGJpbmRJZG5ldGl0aWVzLCByZXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlkZW50aXR5UHJvbWlzZXMucHVzaChwcm9tc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIFByb21pc2UuYWxsKGlkZW50aXR5UHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc3RhcnRWaXNQcm9jZXNzKGJpbmRJZG5ldGl0aWVzLCBzZXJ2aWNlT2IsIHNlcnZpY2VfY29uZmlncyk7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGFkZEl0ZW1Ub0FycmF5KGJpbmRJZG5ldGl0aWVzLCBvYikge1xuICAgIGlmICghYmluZElkbmV0aXRpZXMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gb2IuaWQpKSB7XG4gICAgICBiaW5kSWRuZXRpdGllcy5wdXNoKG9iKTtcbiAgICB9XG4gICAgcmV0dXJuIGJpbmRJZG5ldGl0aWVzO1xuICB9XG5cbiAgZ2V0TGlua0ZvclJlc291cmNlKG9iLCByZXNvdXJjZSkge1xuICAgIHJldHVybiBvYlsnX2xpbmtzJ11bcmVzb3VyY2VdWydocmVmJ107XG4gIH1cblxuICBzdGFydFZpc1Byb2Nlc3MoYmluZElkbmV0aXRpZXMsIHNlbGVjdGVkU2VydmljZU9iLCBzZXJ2aWNlQ29uZmlncykge1xuICAgIHRoaXMuY291bnRHcnAyTmRzID0gMDtcbiAgICB0aGlzLmNvdW50R3JwM05kcyA9IDA7XG4gICAgaWYgKF8uaXNFbXB0eSh0aGlzLnNlbGVjdGVkU2VydmljZSkpIHtcbiAgICAgIHRoaXMuc2VydmljZVNlbGVjdEVycm9yID0gIV8uaXNFbXB0eSh0aGlzLnNlbGVjdGVkU2VydmljZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICB0aGlzLmdyYXBoSnNvbk9iaiA9IHRoaXMuaWRlbnRpdHlTZXJ2aWNlUGF0aEhlbHBlci5nZXRFbmRwb2ludEdyYXBoT2JqKFxuICAgICAgICB0aGlzLmVuZHBvaW50RGF0YSxcbiAgICAgICAgYmluZElkbmV0aXRpZXMsXG4gICAgICAgIHRoaXMuZWRnZXJvdXRlcnMsXG4gICAgICAgIHNlbGVjdGVkU2VydmljZU9iLFxuICAgICAgICBzZXJ2aWNlQ29uZmlnc1xuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgY291bnRHcnAxTmRzID0gMDtcbiAgICB0aGlzLmRvRW5kcG9pbnRIYXNTZXJ2aWNlc0luUHJpdmF0ZU53ID0gZmFsc2U7XG4gICAgdGhpcy5kb0VuZHBvaW50SGFzUHVibGljUm91dGVycyA9IGZhbHNlO1xuICAgIHRoaXMuZG9FbmRwb2ludEhhc0FwcHdhbnMgPSBmYWxzZTtcbiAgICB0aGlzLmdyYXBoSnNvbk9iai5ub2Rlcy5mb3JFYWNoKChuZCkgPT4ge1xuICAgICAgaWYgKG5kLmdyb3VwID09PSAnMycpIHtcbiAgICAgICAgdGhpcy5jb3VudEdycDNOZHMrKztcbiAgICAgIH1cbiAgICAgIGlmIChuZC5ncm91cC5pbmNsdWRlcygnMicpKSB7XG4gICAgICAgIHRoaXMuY291bnRHcnAyTmRzKys7XG4gICAgICB9XG4gICAgICBpZiAobmQuZ3JvdXAgPT09ICcxJykge1xuICAgICAgICBjb3VudEdycDFOZHMrKztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmNvdW50R3JwM05kcyA+IDApIHtcbiAgICAgIHRoaXMuZG9FbmRwb2ludEhhc1NlcnZpY2VzSW5Qcml2YXRlTncgPSB0cnVlOyAvLyBzaG93IHByaXZhdGUvY3VzdG9tZXIgbmV0d29yayBib3gsIHdpbGwgYmUgZGVjaWRlZCB3aXRoIHRoaXMgdmFyaWFibGUuXG4gICAgfVxuICAgIGlmICh0aGlzLmNvdW50R3JwMk5kcyA+IDApIHtcbiAgICAgIHRoaXMuZG9FbmRwb2ludEhhc1B1YmxpY1JvdXRlcnMgPSB0cnVlOyAvLyBzaG93IHB1YmxpYyBuZXR3b3JrIGJveCwgd2lsbCBiZSBkZWNpZGVkIHdpdGggdGhpcyB2YXJpYWJsZS5cbiAgICB9XG5cbiAgICBpZiAoY291bnRHcnAxTmRzID4gMCkge1xuICAgICAgdGhpcy5kb0VuZHBvaW50SGFzQXBwd2FucyA9IHRydWU7IC8vIHNob3cgcHJpdmF0ZSBuZXR3b3JrIGJveCwgd2lsbCBiZSBkZWNpZGVkIHdpdGggdGhpcyB2YXJpYWJsZS5cbiAgICB9XG4gICAgdGhpcy5pbml0VG9wb1ZpZXcoKTtcbiAgfVxuXG4gIHRvZ2dsZU1vZGFsU2l6ZSgpIHtcbiAgICB0aGlzLmZ1bGxTY3JlZW4gPSAhdGhpcy5mdWxsU2NyZWVuO1xuICB9XG5cbiAgaGlkZSgpIHtcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICB9XG5cbiAgaW5pdFRvcG9WaWV3KCkge1xuICAgIGNvbnN0IG1hcmdpbiA9IHsgdG9wOiAxMCwgcmlnaHQ6IDkwLCBib3R0b206IDMwLCBsZWZ0OiAwIH07XG4gICAgY29uc3Qgd2lkdGggPSAxMTAwIC0gbWFyZ2luLmxlZnQgLSBtYXJnaW4ucmlnaHQ7XG4gICAgY29uc3QgaGVpZ2h0ID0gMTEwMCAtIG1hcmdpbi50b3AgLSBtYXJnaW4uYm90dG9tO1xuICAgIGNvbnN0IGNvbG9ycyA9IGQzLnNjYWxlT3JkaW5hbChkMy5zY2hlbWVDYXRlZ29yeTEwKTtcbiAgICBjb25zdCB0b29sdGlwID0gZDMuc2VsZWN0KCcjZXBUb29sdGlwJyk7XG5cbiAgICBsZXQgc3ZnID0gZDMuc2VsZWN0KCcjSWRlbnRpdHlUb3BvbG9neScpLFxuICAgICAgbm9kZSxcbiAgICAgIGxpbms7XG5cbiAgICBjb25zdCBoYW5kbGVab29tID0gKGUpID0+IHN2Zy5hdHRyKCd0cmFuc2Zvcm0nLCBlLnRyYW5zZm9ybSk7XG4gICAgY29uc3Qgem9vbSA9IGQzLnpvb20oKS5vbignem9vbScsIGhhbmRsZVpvb20pO1xuXG4gICAgc3ZnXG4gICAgICAuYXR0cignd2lkdGgnLCAnMTAwJScpXG4gICAgICAuYXR0cignaGVpZ2h0JywgJzEwMCUnKVxuICAgICAgLy8gLmNhbGwoem9vbSlcbiAgICAgIC5hdHRyKCd2aWV3Qm94JywgJzAgJyArIC0xMCArICcgJyArIHdpZHRoICsgJyAnICsgaGVpZ2h0KVxuICAgICAgLmFwcGVuZCgnZycpXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgnICsgLTMwMCArICcsJyArIDIyNSArICcpJyk7XG5cbiAgICBzdmcuc2VsZWN0QWxsKCdnJykucmVtb3ZlKCk7XG5cbiAgICBjb25zdCBzaW11bGF0aW9uOiBhbnkgPSBkM1xuICAgICAgLmZvcmNlU2ltdWxhdGlvbigpXG4gICAgICAuZm9yY2UoXG4gICAgICAgICdsaW5rJyxcbiAgICAgICAgZDNcbiAgICAgICAgICAuZm9yY2VMaW5rKClcbiAgICAgICAgICAuaWQoZnVuY3Rpb24gKGQ6IGFueSkge1xuICAgICAgICAgICAgcmV0dXJuIGQuaWQ7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZGlzdGFuY2UoMTAwKVxuICAgICAgICAgIC5zdHJlbmd0aCgxKVxuICAgICAgKVxuICAgICAgLmZvcmNlKCdjaGFyZ2UnLCBkMy5mb3JjZU1hbnlCb2R5KCkpXG4gICAgICAuZm9yY2UoJ2NlbnRlcicsIGQzLmZvcmNlQ2VudGVyKHdpZHRoIC8gMiwgaGVpZ2h0IC8gMikpO1xuXG4gICAgY29uc3QgbGlua3MgPSB0aGlzLmdyYXBoSnNvbk9iai5saW5rcztcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuZ3JhcGhKc29uT2JqLm5vZGVzO1xuXG4gICAgbGluayA9IHN2Z1xuICAgICAgLnNlbGVjdEFsbCgnZy5saW5lLmxpbmUnKVxuICAgICAgLmRhdGEobGlua3MpXG4gICAgICAuZW50ZXIoKVxuICAgICAgLmFwcGVuZCgnZycpXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGluaycpXG4gICAgICAuYXR0cignbWFya2VyLWVuZCcsICd1cmwoI2Fycm93aGVhZCknKTtcblxuICAgIGxpbmtcbiAgICAgIC5hcHBlbmQoJ2xpbmUnKVxuICAgICAgLnN0eWxlKCdzdHJva2Utd2lkdGgnLCBmdW5jdGlvbiAoZCkge1xuICAgICAgICBpZiAoZC5zdGF0dXMgPT09IDEgfHwgZC5zdGF0dXMgPT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIDEuNTsgLy9NYXRoLnNxcnQoZC53ZWlnaHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLnN0eWxlKCdzdHJva2UnLCBmdW5jdGlvbiAoZCkge1xuICAgICAgICBpZiAoZC5zdGF0dXMgPT09IDEpIHtcbiAgICAgICAgICBsZXQgZG9JblVzYWdlID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuICcjMDBjZDEzJztcbiAgICAgICAgfSBlbHNlIGlmIChkLnN0YXR1cyA9PT0gLTEpIHtcbiAgICAgICAgICByZXR1cm4gJyNkOGRjZTcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAnI2ZmMDA0ZSc7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgbGluay5lYWNoKGZ1bmN0aW9uICh0aGlzOiBhbnksIGQ6IGFueSwgaSkge1xuICAgICAgY29uc3QgX3RoaXMgPSBkMy5zZWxlY3QodGhpcyk7XG4gICAgICBpZiAoZC5zdGF0dXMgPT09IDEpIHtcbiAgICAgICAgbGV0IGRvSW5Vc2FnZSA9IHRydWU7XG4gICAgICAgIF90aGlzXG4gICAgICAgICAgLmFwcGVuZCgndGV4dCcpXG4gICAgICAgICAgLnN0eWxlKCdmaWxsJywgJ3JnYigyNTUsMTk4LDIyKScpXG4gICAgICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnMTEnKTtcbiAgICAgICAgX3RoaXNcbiAgICAgICAgICAuYXBwZW5kKCdyZWN0JylcbiAgICAgICAgICAuYXR0cignZmlsbCcsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3doaXRlJztcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5hdHRyKCd3aWR0aCcsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICBpZiAoZG9JblVzYWdlKSB7XG4gICAgICAgICAgICAgIHJldHVybiAzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIDAuMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIC5hdHRyKCdoZWlnaHQnLCBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgICAgaWYgKGRvSW5Vc2FnZSkge1xuICAgICAgICAgICAgICByZXR1cm4gMztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiAwLjE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuYXBwZW5kKCdhbmltYXRlJyk7XG5cbiAgICAgICAgX3RoaXMuc2VsZWN0KCdyZWN0JykuYXBwZW5kKCdhbmltYXRlJyk7XG4gICAgICB9IGVsc2UgaWYgKGQuc3RhdHVzID09PSAwKSB7XG4gICAgICAgIF90aGlzXG4gICAgICAgICAgLmFwcGVuZCgnaW1hZ2UnKVxuICAgICAgICAgIC5hdHRyKCd4bGluazpocmVmJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICcvYXNzZXRzL2ltYWdlcy92aXN1YWxpemVyL2xpbmstY3V0LnBuZyc7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuYXR0cignd2lkdGgnLCAnMjAnKVxuICAgICAgICAgIC5hdHRyKCdoZWlnaHQnLCAnMjQnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIG5vZGUgPSBzdmdcbiAgICAgIC5zZWxlY3RBbGwoJy5ub2RlJylcbiAgICAgIC5kYXRhKG5vZGVzKVxuICAgICAgLmVudGVyKClcbiAgICAgIC5hcHBlbmQoJ2cnKVxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ25vZGUnKTtcblxuICAgIG5vZGVcbiAgICAgIC5hcHBlbmQoJ2ltYWdlJylcbiAgICAgIC5hdHRyKCd4bGluazpocmVmJywgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgY29uc3Qgcm91dGVySW1hZ2VQYXRoID0gJy9hc3NldHMvaW1hZ2VzL3Zpc3VhbGl6ZXIvUm91dGVycy5wbmcnO1xuICAgICAgICBjb25zdCBub25Qcm92aXNpb25lZFJvdXRlckltYWdlUGF0aCA9XG4gICAgICAgICAgJy9hc3NldHMvaW1hZ2VzL3Zpc3VhbGl6ZXIvRVIucG5nJztcbiAgICAgICAgY29uc3QgZXJyUm91dGVySW1hZ2VQYXRoID0gJy9hc3NldHMvaW1hZ2VzL3Zpc3VhbGl6ZXIvZXJyb3JfZXIucG5nJztcbiAgICAgICAgY29uc3QgZXJyRW5kcG9pbnRJbWFnZVBhdGggPSAnL2Fzc2V0cy9pbWFnZXMvdmlzdWFsaXplci9ob3N0LWVycm9yLnBuZyc7XG4gICAgICAgIGNvbnN0IHVucmVnaXN0ZXJlZEVuZHBvaW50SW1hZ2VQYXRoID1cbiAgICAgICAgICAnL2Fzc2V0cy9pbWFnZXMvdmlzdWFsaXplci9ob3N0X3VucmVnaXN0ZXJlZC5wbmcnO1xuICAgICAgICBjb25zdCBlbmRQb2ludFBhdGggPSAnL2Fzc2V0cy9pbWFnZXMvdmlzdWFsaXplci9ob3N0LnBuZyc7XG5cbiAgICAgICAgaWYgKGQudHlwZS5pbmNsdWRlcygnSWRlbnRpdHknKSAmJiBkLnN0YXR1cyA9PT0gJ1VuLVJlZ2lzdGVyZWQnKSB7XG4gICAgICAgICAgcmV0dXJuIHVucmVnaXN0ZXJlZEVuZHBvaW50SW1hZ2VQYXRoO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIGQudHlwZS5pbmNsdWRlcygnSWRlbnRpdHknKSAmJlxuICAgICAgICAgIGQuYXBpU2Vzc2lvbiA9PT0gJ1llcycgJiZcbiAgICAgICAgICBkLnN0YXR1cyA9PT0gJ1JlZ2lzdGVyZWQnXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBlbmRQb2ludFBhdGg7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgZC50eXBlLmluY2x1ZGVzKCdJZGVudGl0eScpICYmXG4gICAgICAgICAgKGQucm91dGVyQ29ubmVjdGlvbiA9PT0gJ05vJyB8fCBkLmFwaVNlc3Npb24gPT09ICdObycpXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBlcnJFbmRwb2ludEltYWdlUGF0aDtcbiAgICAgICAgfSBlbHNlIGlmIChkLnR5cGUuaW5jbHVkZXMoJ0lkZW50aXR5JykpIHtcbiAgICAgICAgICByZXR1cm4gZW5kUG9pbnRQYXRoO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIGQudHlwZS5pbmNsdWRlcygnUm91dGVyJykgJiZcbiAgICAgICAgICAoZC5zdGF0dXMgPT09ICdFUlJPUicgfHwgZC5vbmxpbmUgPT09ICdObycpXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBlcnJSb3V0ZXJJbWFnZVBhdGg7XG4gICAgICAgIH0gZWxzZSBpZiAoZC50eXBlLmluY2x1ZGVzKCdSb3V0ZXInKSAmJiBkLnN0YXR1cyA9PT0gJ1BST1ZJU0lPTkVEJykge1xuICAgICAgICAgIHJldHVybiByb3V0ZXJJbWFnZVBhdGg7XG4gICAgICAgIH0gZWxzZSBpZiAoZC50eXBlLmluY2x1ZGVzKCdSb3V0ZXInKSkge1xuICAgICAgICAgIHJldHVybiBub25Qcm92aXNpb25lZFJvdXRlckltYWdlUGF0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkLmdyb3VwID09PSAnNCcpIHtcbiAgICAgICAgICByZXR1cm4gJy9hc3NldHMvaW1hZ2VzL3Zpc3VhbGl6ZXIvc2VydmljZS5wbmcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5hdHRyKCd4JywgLTI1KVxuICAgICAgLmF0dHIoJ3knLCAtMjUpXG4gICAgICAuYXR0cignd2lkdGgnLCAnNDAnKVxuICAgICAgLmF0dHIoJ2hlaWdodCcsICc0MCcpO1xuXG4gICAgbm9kZVxuICAgICAgLmFwcGVuZCgndGV4dCcpXG4gICAgICAuYXR0cigneCcsIDEwKVxuICAgICAgLmF0dHIoJ3knLCAxMilcbiAgICAgIC5hdHRyKCdmaWxsJywgJ3ZhcigtLXRhYmxlVGV4dCknKVxuICAgICAgLnRleHQoZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgcmV0dXJuIGQubmFtZTtcbiAgICAgIH0pO1xuXG4gICAgc2ltdWxhdGlvbi5ub2Rlcyhub2Rlcykub24oJ3RpY2snLCB0aWNrZWQpO1xuXG4gICAgc2ltdWxhdGlvbi5mb3JjZSgnbGluaycpLmxpbmtzKGxpbmtzKTtcbiAgICBub2RlLm9uKCdtb3VzZW92ZXInLCAoZXZlbnQsIGQpID0+IHtcbiAgICAgIGNvbnN0IGVuZHBvaW50VXRsaXphdGlvbkpzb24gPSB7fTtcbiAgICAgIGRyYXdUb29sdGlwKGV2ZW50LCBkLCBlbmRwb2ludFV0bGl6YXRpb25Kc29uKTtcbiAgICB9KTtcblxuICAgIG5vZGUub24oJ21vdXNlb3V0JywgZnVuY3Rpb24gKCkge1xuICAgICAgcmVtb3ZlVG9vbHRpcCgpO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gdGlja2VkKCkge1xuICAgICAgbm9kZS5hdHRyKCd0cmFuc2Zvcm0nLCBmdW5jdGlvbiAoZCkge1xuICAgICAgICByZXR1cm4gJ3RyYW5zbGF0ZSgnICsgZC5wb3N4ICsgJywnICsgZC5wb3N5ICsgJyknO1xuICAgICAgfSk7XG5cbiAgICAgIGxpbmtcbiAgICAgICAgLnNlbGVjdCgnbGluZScpXG4gICAgICAgIC5hdHRyKCd4MScsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgcmV0dXJuIGQuc291cmNlLnBvc3g7XG4gICAgICAgIH0pXG4gICAgICAgIC5hdHRyKCd5MScsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgcmV0dXJuIGQuc291cmNlLnBvc3k7XG4gICAgICAgIH0pXG4gICAgICAgIC5hdHRyKCd4MicsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgcmV0dXJuIGQudGFyZ2V0LnBvc3g7XG4gICAgICAgIH0pXG4gICAgICAgIC5hdHRyKCd5MicsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgcmV0dXJuIGQudGFyZ2V0LnBvc3k7XG4gICAgICAgIH0pO1xuXG4gICAgICBsaW5rXG4gICAgICAgIC5zZWxlY3QoJ2ltYWdlJylcbiAgICAgICAgLmF0dHIoJ3gnLCBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgIGNvbnN0IHgxID0gZC5zb3VyY2UucG9zeCxcbiAgICAgICAgICAgIHgyID0gZC50YXJnZXQucG9zeCxcbiAgICAgICAgICAgIHggPSB4MSAtICh4MSAtIHgyKSAvIDI7XG5cbiAgICAgICAgICByZXR1cm4geCAtIDg7XG4gICAgICAgIH0pXG4gICAgICAgIC5hdHRyKCd5JywgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICBjb25zdCB5MSA9IGQuc291cmNlLnBvc3ksXG4gICAgICAgICAgICB5MiA9IGQudGFyZ2V0LnBvc3ksXG4gICAgICAgICAgICB5ID0geTEgLSAoeTEgLSB5MikgLyAyO1xuXG4gICAgICAgICAgcmV0dXJuIHkgLSAxMjtcbiAgICAgICAgfSk7XG5cbiAgICAgIGxpbmtcbiAgICAgICAgLnNlbGVjdCgncmVjdCcpXG4gICAgICAgIC5hdHRyKCdvcGFjaXR5JywgMSlcbiAgICAgICAgLmF0dHIoJ3gnLCBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgIHJldHVybiBkLnNvdXJjZS5wb3N4O1xuICAgICAgICB9KVxuICAgICAgICAuYXR0cigneScsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgcmV0dXJuIGQuc291cmNlLnBvc3k7XG4gICAgICAgIH0pXG4gICAgICAgIC5zZWxlY3RBbGwoJ2FuaW1hdGUnKVxuICAgICAgICAuZWFjaChmdW5jdGlvbiAodGhpczogYW55LCBkOiBhbnksIGkpIHtcbiAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgZDMuc2VsZWN0KHRoaXMpXG4gICAgICAgICAgICAgIC5hdHRyKCdhdHRyaWJ1dGVOYW1lJywgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3gnO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuYXR0cignZnJvbScsIGZ1bmN0aW9uIChkOiBhbnkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuID0gZC5zb3VyY2UucG9zeCAtIDE7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5hdHRyKCd0bycsIGZ1bmN0aW9uIChkOiBhbnkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZC50YXJnZXQucG9zeDtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGQzLnNlbGVjdCh0aGlzKVxuICAgICAgICAgICAgICAuYXR0cignYXR0cmlidXRlTmFtZScsIGZ1bmN0aW9uIChkOiBhbnkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3knO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuYXR0cignZnJvbScsIGZ1bmN0aW9uIChkOiBhbnkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZC5zb3VyY2UucG9zeTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmF0dHIoJ3RvJywgZnVuY3Rpb24gKGQ6IGFueSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkLnRhcmdldC5wb3N5O1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkMy5zZWxlY3QodGhpcylcbiAgICAgICAgICAgIC5hdHRyKCdhdHRyaWJ1dGVUeXBlJywgJ1hNTCcpXG4gICAgICAgICAgICAuYXR0cignYmVnaW4nLCAnMC41cycpXG4gICAgICAgICAgICAuYXR0cignZHVyJywgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuICcxLjBzJztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYXR0cigncmVwZWF0Q291bnQnLCAnaW5kZWZpbml0ZScpO1xuICAgICAgICB9KTtcbiAgICB9IC8vIGVuZCBvZiB0aWNrZWRcblxuICAgIGZ1bmN0aW9uIHJlbW92ZVRvb2x0aXAoKSB7XG4gICAgICBpZiAodG9vbHRpcCkge1xuICAgICAgICB0b29sdGlwLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkcmF3VG9vbHRpcChldmVudCwgZCwgZW5kcG9pbnRVdGxpemF0aW9uSnNvbikge1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VwVG9vbHRpcCcpLmlubmVySFRNTCA9IHJlYWRLZXlWYWx1ZXMoXG4gICAgICAgIGQsXG4gICAgICAgIGVuZHBvaW50VXRsaXphdGlvbkpzb25cbiAgICAgICk7XG4gICAgICB0b29sdGlwLnN0eWxlKCdkaXNwbGF5JywgJ2Jsb2NrJyk7XG4gICAgICB0b29sdGlwLnN0eWxlKCd3aGl0ZS1zcGFjZScsICdwcmUtd3JhcCcpO1xuICAgICAgY29uc3QgeCA9IGV2ZW50LnBhZ2VYICsgJ3B4JztcbiAgICAgIGNvbnN0IHkgPSBldmVudC5wYWdlWSArICdweCc7XG4gICAgICB0b29sdGlwLnN0eWxlKCdsZWZ0JywgeCk7XG4gICAgICB0b29sdGlwLnN0eWxlKCd0b3AnLCB5KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkS2V5VmFsdWVzKGQsIGVuZHBvaW50VXRsaXphdGlvbkpzb24pIHtcbiAgICAgIGxldCBpbmZvID1cbiAgICAgICAgXCI8ZGl2IGNsYXNzPSd0b29sLXRpcC1jb250YWluZXInIHN0eWxlPSdmb250LXNpemU6MTRweDtmb250LWZhbWlseTpPcGVuIFNhbnM7IGZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtY29sb3I6IHZhcigtLXRhYmxlVGV4dCk7Jz5cIjtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhkKTtcblxuICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBrID09PSAnc3RhdHVzJyB8fFxuICAgICAgICAgIGsgPT09ICdwb3N5JyB8fFxuICAgICAgICAgIGsgPT09ICdwb3N4JyB8fFxuICAgICAgICAgIGsgPT09ICdncm91cCcgfHxcbiAgICAgICAgICBrID09PSAnaG9zdGVkRWRnZUlkJyB8fFxuICAgICAgICAgIGsgPT09ICd2YWx1ZScgfHxcbiAgICAgICAgICBrID09PSAnaW5kZXgnIHx8XG4gICAgICAgICAgayA9PT0gJ3BhcmVudCcgfHxcbiAgICAgICAgICBrID09PSAnZGVwdGgnIHx8XG4gICAgICAgICAgayA9PT0gJ3gnIHx8XG4gICAgICAgICAgayA9PT0gJ3knIHx8XG4gICAgICAgICAgayA9PT0gJ2lkJyB8fFxuICAgICAgICAgIGsgPT09ICd4MCcgfHxcbiAgICAgICAgICBrID09PSAneTAnIHx8XG4gICAgICAgICAgayA9PT0gJ3Z5JyB8fFxuICAgICAgICAgIGsgPT09ICd2eCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gY29udGludWU7XG4gICAgICAgIH0gZWxzZSBpZiAoayA9PT0gJ2NoaWxkcmVuJykge1xuICAgICAgICAgIGNvbnN0IGtWYWw6IGFueSA9IGRba107XG4gICAgICAgICAgaWYgKGtWYWwgJiYga1ZhbCAhPT0gJycpIHtcbiAgICAgICAgICAgICBpbmZvID0gaW5mbyArICc8ZGl2IGNsYXNzPVwicHJvcC1yb3dcIj4nICsgayArICc6ICcgKyBrVmFsLmxlbmd0aCArICc8L2Rpdj4nO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoaXNBbk9iamVjdChkW2tdKSkge1xuICAgICAgICAgICAgY29uc3Qga1ZhbDogYW55ID0gZFtrXTtcbiAgICAgICAgICAgIGlmIChrVmFsICYmIGtWYWwgIT09ICcnKSB7XG4gICAgICAgICAgICAgIGluZm8gPSBpbmZvICsgJzxkaXYgY2xhc3M9XCJwcm9wLXJvd1wiPicgKyBrICsgJzogJyArIGtWYWwubmFtZSArICc8L2Rpdj4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoZFtrXSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICBpbmZvID1cbiAgICAgICAgICAgICAgaW5mbyArXG4gICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwicHJvcC1yb3dcIj4nICtcbiAgICAgICAgICAgICAgayArXG4gICAgICAgICAgICAgICc6ICcgK1xuICAgICAgICAgICAgICBkW2tdLmpvaW4oJzxicj4gJm5ic3A7Jm5ic3A7ICZuYnNwOyZuYnNwOycpICtcbiAgICAgICAgICAgICAgJzwvZGl2Pic7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHZvID0gZFtrXTtcbiAgICAgICAgICAgIGlmICh2byAmJiB2byAhPT0gJycpIHtcbiAgICAgICAgICAgICAgaW5mbyA9XG4gICAgICAgICAgICAgICAgaW5mbyArXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJwcm9wLXJvd1wiPicgK1xuICAgICAgICAgICAgICAgIGsgK1xuICAgICAgICAgICAgICAgICc6ICcgK1xuICAgICAgICAgICAgICAgICh2byAhPT0gbnVsbCB8fCB2byAhPT0gJycgPyBkW2tdIDogJ04vQScpICtcbiAgICAgICAgICAgICAgICAnPC9kaXY+JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gaW5mbyArICc8L2Rpdj4nO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQW5PYmplY3Qobykge1xuICAgICAgcmV0dXJuIG8gaW5zdGFuY2VvZiBPYmplY3QgJiYgby5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0O1xuICAgIH1cblxuICAgIHRoaXMucmVmcmVzaFJvdGF0ZSA9IGZhbHNlO1xuICB9IC8vIGVuZCBvZiBpbml0VG9wb1ZpZXdcbn1cblxuY2xhc3MgU2VydmljZURhdGEge1xuICBpZDtcbiAgbmFtZTtcbn1cblxuIiwiPGRpdiBbbmdDbGFzc109XCJ7ICdmdWxsLXNjcmVlbic6IGZ1bGxTY3JlZW4gfVwiIGNsYXNzPVwibW9kYWwgc29saWRcIiBpZD1cIklkZW50aXR5VmlzdWFsaXplclwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0cC1kYXRhLWhlYWRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWx0aXRsZVwiPklkZW50aXR5IFNlcnZpY2UgUGF0aDwvZGl2PlxuICAgICAgICA8ZGl2IChjbGljayk9XCJoaWRlKClcIiBjbGFzcz1cImJ1dHRvbkJhbGwgaWNvbi1jbG9zZVwiIGlkPVwiRXNjWkVuZHBvaW50Q2xvc2VcIj48L2Rpdj5cbiAgICAgICAgPGRpdiAoY2xpY2spPVwidG9nZ2xlTW9kYWxTaXplKClcIiBjbGFzcz1cImJ1dHRvbkJhbGwgcmVzaXplXCIgaWQ9XCJSZXNpemVNb2RhbEJ1dHRvblwiPjwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgW25nQ2xhc3NdPVwiaXNEYXJrTW9kZT09dHJ1ZT8nZGFya01vZGUnOidsaWdodE1vZGUnXCIgY2xhc3M9XCJpZGVudGl0eS10b3BvbG9neS1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOiAxMDAlOyBoZWlnaHQ6IDgwcHg7IGZsb2F0OiBsZWZ0XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXAtdG9wb2xvZ3ktZmlsdGVyLWNvbnRhaW5lciBsaXN0Qm94IHJvd1wiPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwiZmlsdGVyU2VhcmNoQXJyYXkoKVwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRTZXJ2aWNlXCJcbiAgICAgICAgICAgICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0b3BvbG9neS1maWx0ZXItaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICBpZD1cImZpbHRlclRleHRcIlxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlR5cGUgdG8gc2VhcmNoIGlkZW50aXR5IGFjY2Vzc2libGUgc2VydmljZXMuXCJcbiAgICAgICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJTZWFyY2hGaWx0ZXIoKVwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmlsdGVyVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2xlYXItc3ZjLWljb24gaWNvbi1jbG9zZVwiXG4gICAgICAgICAgICAgICAgICAgIGlkPVwiQ2xlYXJTZWFyY2hGaWx0ZXJcIlxuICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IFtoaWRkZW5dPVwiIW5vU2VhcmNoUmVzdWx0c1wiIGNsYXNzPVwibm8tcmVzdWx0cy13YXJuaW5nXCI+Tm8gUmVzdWx0cyBGb3VuZDwvZGl2PlxuICAgICAgICAgICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCIgKG9wdGlvblNlbGVjdGVkKT1cImF1dG9jb21wbGV0ZVNlYXJjaCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgYXV0b2NvbXBsZXRlT3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb24ubmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvcG90aXBcIiBpZD1cImVwVG9vbHRpcFwiPjwvZGl2PlxuXG4gICAgICAgICAgICA8c3ZnIHN0eWxlPSdwb2ludGVyLWV2ZW50czphbGwnIGhlaWdodD1cIjEwMDBcIiBpZD1cIklkZW50aXR5VG9wb2xvZ3lcIiB3aWR0aD1cIjEyMDBcIj5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPGxpYi1sb2FkaW5nLWluZGljYXRvciAqbmdJZj1cImlzTG9hZGluZ1wiIFtpc0xvYWRpbmddPVwiaXNMb2FkaW5nXCI+PC9saWItbG9hZGluZy1pbmRpY2F0b3I+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRvcG9sb2d5LWxlZ2VuZEFcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtaXRlbS1oZWFkXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC10ZXh0LWhlYWRpbmdcIj5Db21wb25lbnQgU3RhdHVzPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtaXRlbVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtY2lyY2xlIHVucmVnaXN0ZXJlZFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtdGV4dFwiPlVucmVnaXN0ZXJlZCAvIE9mZmxpbmU8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC1jaXJjbGUgcmVnaXN0ZXJlZF9pbl91c2VcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLXRleHRcIj5SZWdpc3RlcmVkLCBPbmxpbmU8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC1jaXJjbGUgZXJyb3JlZFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtdGV4dFwiPkVycm9yZWQ8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwidG9wb2xvZ3ktbGVnZW5kQlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC1pdGVtLWhlYWRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLXRleHQtaGVhZGluZ1wiPkxpbmsgU3RhdHVzPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtaXRlbVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtY2lyY2xlIHVucmVnaXN0ZXJlZFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtdGV4dFwiPk9mZmxpbmU8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC1jaXJjbGUgcmVnaXN0ZXJlZF9pbl91c2VcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLXRleHRcIj5JbiBVc2FnZTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWNpcmNsZSByZWdpc3RlcmVkX25vdF9pbl91c2VcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLXRleHRcIj5Vc2FnZSBEYXRlIE4vQTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWNpcmNsZSBsaW5rZXJyb3JlZFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtdGV4dFwiPkVycm9yZWQ8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|